2011-11-04 31 views
2

一個會如何在Python類指定靜態方法或變量,在CPython的C++指定靜態變量?在C++ Python類

在PyTypeObject結構,tp_getset,tp_methods,tp_members似乎都假定類的一個實例。

非常感謝, 羅布。

+0

看到http://stackoverflow.com/questions/68645/static-class-variables-in-python –

+0

http://docs.python.org/extending/extending.html的答案 –

+0

第一個環節不請參閱C++ ,而第二個鏈接並未引用python類中的靜態變量。 在這些鏈接裏有什麼我缺少的與我的問題有關嗎?感謝 – rbairos

回答

1

靜態和類方法可以在tp_methods通過添加METH_STATICMETH_CLASSPyMethodDef結構的ml_flags字段來定義。這相當於@staticmethod@classmethod裝飾器。

該方法的第一個參數(通常是實例指針)將爲靜態方法的NULL和類方法的PyTypeObject*

http://docs.python.org/c-api/structures.html#PyMethodDef

類屬性可以通過調用PyType_Ready()(在你的模塊初始化函數)之前設置tp_dict與這些屬性字典中加入。另外tp_dict可以保留爲NULL在這種情況下PyType_Ready()將創建字典爲您服務。這些屬性可以添加到該字典中。

http://docs.python.org/c-api/typeobj.html#tp_dict

已計算類屬性需要一個描述符類,正是因爲在Python。與其他類屬性一樣,描述符的一個實例應該被添加到tp_dict