2012-03-13 31 views
10

定義爲類的集合:類型錯誤:錯誤調用元類基地當一個新的風格類不能只有經典基地

class A(): 
    @staticmethod 
    def call(): 
     print('a') 

class C(type): 
    def __repr__(self): 
     return 'somename' 

class B(A): 
    __metaclass__ = C 

    @staticmethod 
    def call(): 
     print('b') 

    def boundcall(self): 
     print('bound') 

運行時,給出了這樣的錯誤:

TypeError: Error when calling the metaclass bases 
    a new-style class can't have only classic bases 

我需要元類(我認爲)在我的代碼中有一個B的已知字符串表示形式。這樣做的理由並不重要,但它對未來的更新會有很大的幫助。

因此,假設我需要C作爲B的元類,B將成爲A的子類,有人可以告訴我這裏出了什麼問題,以及我可能會如何改變我在做什麼來消除錯誤?

回答

16

的問題是線

class A(): 

它應該是:

class A(object): 

這樣的話,你犯了一個新的樣式類。空的parens沒有任何意義,但我仍然在stackoverflow和其他地方看到它們。爲什麼,哦,爲什麼?

相關問題