2016-11-22 45 views
1

我正在使用類型對象開發新的Python數據類型。我使用了「爲Python 2.7.12定義新類型頁面」作爲指導,並能夠根據我的特定需求調整該頁面上的示例。我能夠創建我的新數據類型並將其添加到Python模塊。當我運行Python的東西時,我可以創建一個像這樣的新對象。Python C API,tp_new函數未被調用

x = MyNewType() 

在這種情況下,我的tp_new函數被調用,我能夠填補默認的數據項就是我想要的。但是,如果我嘗試通過調用PyObject_New()來嘗試在C++中執行相同的操作,則不會調用我的tp_new函數。作爲解決方法,我可以在每個數據成員上撥打PyObject_SetAttrString(),而不會造成任何問題。我看到與我的tp_init函數相同的問題,其中調用PyObject_Init()不會導致我的tp_init函數被調用。我花了一天的好時間試圖跟蹤這件事情,沒有運氣。任何幫助,將不勝感激。

回答

2

最好的方法是call類對象,就像在Python本身一樣。

學分:我剛剛從this得知了答案。