以下是我能想到的从实例方法获取类属性的各种方法(在我的脑海中):
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')