在我看来,您想要获得:
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.append(self)
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
方法可以像普通函数一样引用全局名称。与方法关联的全局范围是包含其定义的模块。(类从不用作全局范围。)
http://docs.python.org/2/tutorial/classes.html#class-definition-syntax
一个类有一个由字典对象实现的命名空间。类属性引用被翻译成这个字典中的查找,例如,C.x
被翻译成C.__dict__["x"]
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 的辩论中,我是否误解了某些内容?