0

好的,我之前问过一个类似的问题,但由于我缺乏正确的术语而太混乱了。这是我第二口吃苹果。

我想创建一个对象,它__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)等等。我希望它是自动的。

4

2 回答 2

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>, ...]

然而,这可能不是你想要的。

于 2012-06-24T18:06:41.840 回答
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
于 2012-06-24T18:07:59.660 回答