2012-10-01 56 views
0

我試圖強制Python 2.7打印格式化字符串爲ctypes POINTER(<type>)。我想我會寫一個從POINTER繼承的類並且重載__str__。不幸的是運行這段代碼:Python:從ctypes指針POINTER和「TypeError:不能創建實例:沒有_type_」

from ctypes import * 

pc_int = POINTER(c_int) 
class PInt(pc_int): 
    def __str__(self): 
     return "Very nice formatting ", self.contents 

print pc_int(c_int(5)) 
print PInt(c_int(5)) 

失敗,這樣的例外

$ python playground.py 
<__main__.LP_c_int object at 0x7f67fbedfb00> 
Traceback (most recent call last): 
    File "playground.py", line 9, in <module> 
    print PInt(c_int(5)) 
TypeError: Cannot create instance: has no _type_ 

有誰知道如何幹淨地達到預期效果或這是什麼例外的含義?

「TypeError:Can not create instance:has no type type」只有1個谷歌搜索結果,它的用處並不是那麼有用。

謝謝!

回答

1

問題是用於實現POINTER和相關類的​​元類直接在類字典中查找特殊字段,如_type_,因此無法處理繼承的特殊字段。

修復的方法是簡單的:

pc_int = POINTER(c_int) 
class PInt(pc_int): 
    _type_ = c_int # not pc_int 
    ...