2012-06-24 16 views
0

好的,我之前問過類似的問題,但由於我缺乏正確的術語,所以太困惑了。這是我第二次在蘋果上咬人。簡單的OOP:Python,通過__init__ v2保存對象名稱

我想創建一個對象,其__init__將保存名稱分配給列表中的對象。

有點兒像這樣:

class Object(): 

    def __init__(self, something): 

    self.something = something 
    (now how do I save the xxx, xx, and x names I create below?) 

xxx = Object(something) 

xx = Object(something) 

x = Object(something) 

我希望有一個全球total_objects(或其他)包含[xxx, xx, x] 對不起,照出格式。我希望我的問題仍然清楚。

如:

total_objects = [xxx, xx, x] 

另外,請讓我知道,如果我的做法是草率的,有一個更好的辦法,但我不希望有保存在代碼本身的「X」的名字。如total_objects.append(xxx)total_objects.append(xx)等我想它是自動的。

+0

你要的對象或對象的實例的名稱? – C0deH4cker

+3

呃,等等,什麼? – Griwes

+0

這個確切的問題是在前段時間,它甚至回答(有一些骯髒的黑客),但我恐怕找不到它。我的想法是:明確寫出或使用Lisp。 – Kos

回答

2
lis = [] 
class Object(): 
    def __init__(self, var): 
     self.something = var 
     lis.append(self) #here self is the reference to the instance being created and you can save it in a list to access it later 
xxx = Object('123') 
xx = Object('12') 
x = Object('1') 

for x in lis: 
    print(x.something) 

輸出:

123 
12 
1 
+0

選擇它爲簡單 – IQuit

4

你不能在Python中完全做到這一點,因爲沒有什麼需要將對象分配給特定名稱,所以初始化程序不會傳遞這樣的信息。

例如,下面的線都是有效的Python:

x = Object() 
y = x 
Object() 
[Object() for i in xrange(5)] 
x = [Object() for i in xrange(5)] 

如果你想跟蹤對象的情況下,你能做到這一點,但這是從引用這些實例名稱分開:

class Object(object): 
    my_instances = [] 

    def __init__(self): 
     my_instances.append(self) 

然後Object.my_instances將包含實例的列表:

[<__main__.Object instance at 0x012BA760>, ...] 

但是,這可能不是你想要的。

相關問題