简单OOP:Python,通过_init__v2保存对象名

简单OOP:Python,通过_init__v2保存对象名,python,oop,Python,Oop,好的,我以前问过一个类似的问题,但是因为我没有正确的术语,所以太让人困惑了。这是我第二次吃苹果 我想创建一个对象,它的\uuuu init\uuu将把分配给该对象的名称保存在一个列表中 有点像这样: class Object(): def __init__(self, something): self.something = something (now how do I save the xxx, xx, and x names I create below?) xx

好的,我以前问过一个类似的问题,但是因为我没有正确的术语,所以太让人困惑了。这是我第二次吃苹果

我想创建一个对象,它的
\uuuu init\uuu
将把分配给该对象的名称保存在一个列表中

有点像这样:

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)
我想要一个包含
[xxx,xx,x]
对不起,格式太糟糕了。我希望我的问题仍然很清楚

例如:

 total_objects = [xxx, xx, x]

另外,请让我知道我的方法是否草率,是否有更好的方法,但我不想在代码本身中保存“x”名称。例如
total\u objects.append(xxx)
total\u objects.append(xx)
等等。我希望它是自动的。

在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)
[<__main__.Object instance at 0x012BA760>, ...]
然后,
Object.my_实例
将包含一个实例列表:

class Object(object):
    my_instances = []

    def __init__(self):
        my_instances.append(self)
[<__main__.Object instance at 0x012BA760>, ...]
[,…]

但是,这可能不是您想要的。

在Python中不能完全做到这一点,因为不需要将对象指定给特定的名称,因此初始化器不会传递此类信息

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)
例如,以下行都是有效的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)
[<__main__.Object instance at 0x012BA760>, ...]
然后,
Object.my_实例
将包含一个实例列表:

class Object(object):
    my_instances = []

    def __init__(self):
        my_instances.append(self)
[<__main__.Object instance at 0x012BA760>, ...]
[,…]
然而,这可能不是你想要的

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
输出:

123
12
1

你想要对象的名称还是对象的实例?这个确切的问题很久以前就出现了,它甚至被回答了(用一些肮脏的黑客),但我恐怕找不到它。我的想法是:明确地写下这个问题,或者使用Lisp。你想要对象的名称还是对象的实例?这个问题很久以前就出现了,它甚至得到了回答(用一些肮脏的黑客),但我恐怕找不到它。我的想法是:显式编写或使用Lisp。