あなたはそれを手に入れたいようです:
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 との議論で何か誤解していましたか?