2011-05-31 66 views

回答

21

當一個對象被索引時,特殊方法__getitem__首先在對象的類中被查找。一個類本身就是一個對象,而一個類的類通常是type。因此,要覆蓋__getitem__一類,你可以重新定義它的元類(使它的type一個子類):

class MetaA(type): 
    def __getitem__(cls,val): 
     return "It works" 

class A(object): 
    __metaclass__=MetaA 
    pass 

print(A[0]) 
# It works 

在Python3元類指定這樣:

class A(object, metaclass=MetaA): 
    pass 
+0

尼斯和甜:)在py3中 – Woltan 2011-05-31 13:13:21

+0

它不 – 2013-09-02 12:03:50

+1

@ups:元類在Python3中以不同的方式指定。我已經添加了代碼以顯示如何,上面。 – unutbu 2013-09-02 12:22:43