インスタンスメソッドからクラス属性を取得するために(頭から離れて)考えることができるさまざまな方法を次に示します。
class Ben:
i = 320894
def foo(self):
return self.i, self.__class__.i, Ben.i, Ben.__dict__['i'], getattr(Ben,'i')
print Ben().foo()
版画:
(320894, 320894, 320894, 320894, 320894)
Ben().foo()
vsに注意してくださいBen.foo(self)
-- 呼び出す前に Ben のインスタンスが必要であり、foo
そのインスタンスのメソッドとして をself
呼び出すことは暗黙的です。と同様にインスタンスを作成してから呼び出すfoo
場合Ben().foo()
b=Ben()
b.foo()
self.i
またはBen.i
最も簡単です。これらは異なる可能性があることに注意してください。self.i
はインスタンス属性でBen.i
あり、クラス属性です:
class Ben(object):
i = 'class i'
def __init__(self):
self.i='instance i'
def foo(self):
return ('Instance i:',self.i, getattr(self,'i'), self.__dict__['i'],
'Class i:',self.__class__.i, getattr(Ben,'i'), Ben.i, Ben.__dict__['i'])
print Ben().foo()
版画:
('Instance i:', 'instance i', 'instance i', 'instance i',
'Class i:', 'class i', 'class i', 'class i', 'class i')