我觉得你想要获得那个东西:
class Classy :
CLASSIES = []
def __init__(self) :
self.hi = "HI!"
Classy.CLASSIES.append(self)
for i in xrange(4):
Classy()
for x in Classy.CLASSIES:
print x
结果
<__main__.Classy instance at 0x011DF3F0>
<__main__.Classy instance at 0x011DF440>
<__main__.Classy instance at 0x011DF418>
<__main__.Classy instance at 0x011DF2B0>
编辑
请注意,使用Lattyware的代码:
class Classy :
CLASSIES = []
idC = id(CLASSIES)
def __init__(self) :
self.hi = "HI!"
Classy.CLASSIES = [Classy() for _ in xrange(0,4)]
print Classy.idC
print id(Classy.CLASSIES)
print 'Classy.idC==id(Classy.CLASSIES) :',Classy.idC==id(Classy.CLASSIES)
结果
18713576
10755928
Classy.idC==id(Classy.CLASSIES) : False
使用delnan'code的for循环时,它不会出现。
然而,很容易纠正:
写
Classy.CLASSIES[:] = [Classy() for _ in xrange(0,4)]
或者
Classy.CLASSIES.extend(Classy() for _ in xrange(0,4))
而不是
Classy.CLASSIES = [Classy() for _ in xrange(0,4)]
这取决于所需的内容。
编辑2
方法可以像普通函数一样引用全局名称。与一个方法关联的全局作用域是包含其定义的模块。(类从不被用作全局作用域。)一个类有一个由字典对象实现的命名空间。类属性引用被翻译成在这个字典中查找,例如,
C.x
被翻译成
C.__dict__["x"]
。
参考链接:
- http://docs.python.org/2/tutorial/classes.html#class-definition-syntax
- http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes
class Classy :
CLASSIES = []
print '"CLASSIES" in globals()',"CLASSIES" in globals()
print '"CLASSIES" in Classy.__dict__ ==',"CLASSIES" in Classy.__dict__
结果
"CLASSIES" in globals() False
"CLASSIES" in Classy.__dict__ == True
Delnan,您将如何继续假装CLASSIES是全球性的?
在与Lattyware辩论中,我有什么误解吗?