これを機能させるには、何を変更する必要がありますか?
class A:
@staticmethod
def __getitem__(val):
return "It works"
print A[0]
__getitem__
type でメソッドを呼び出していることに注意してくださいA
。
これを機能させるには、何を変更する必要がありますか?
class A:
@staticmethod
def __getitem__(val):
return "It works"
print A[0]
__getitem__
type でメソッドを呼び出していることに注意してくださいA
。
オブジェクトがインデックス化さ__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