Python:如何引用实例名称?


问题内容

我正在使用以下代码收集实例:

class Hand():
    instances = []
    def __init__(self):
        Hand.instances.append(self)
        self.value = 5

    def do_something(self, a):
        self.value = self.value * a

class Foo():
    def __init__(self):
        pass

    def insty(self):
        self.hand1 = Hand()
        self.hand2 = Hand()


foo = Foo()
foo.insty()
print Hand.instances

for hand in Hand.instances:
    print "how do I print the instance name?"

最后一行只是学习如何访问实例名称的一种方法,因此我可以按顺序在每个实例上调用“ do_something”方法。

如何访问Hand的每个实例的实例名称?


问题答案:

如果您想知道如何hand1从分配给的实例中获取信息self.hand1,那么答案是您做不到。执行此操作时self.hand1 = Hand(),您告诉Foo对象它有一个Hand,但是Hand对象不知道已将其分配给Foo。您可以这样做:

h = Hand()
self.bob = h
self.larry = h

现在那只手的“名称”应该是什么?您为“ bob”和“ larry”分配了相同的手,因此不可能有一个唯一的名称。

如果要为每只手起一个名字,则需要告诉该手要给它起什么名字。您将必须修改Hand代码以允许您将名称传递给构造函数,然后使用来创建Hand
Hand("some name")

您当然可以通过在指针上分配属性来为其指定名称:

self.hand1 = Hand()
self.hand1.name = "hand 1"

。。。但是这些名称在任何方面都不是特殊的或“自动的”。

底线是,如果你想要的东西有一个名字, 需要决定如何处理该名称。您需要编写自己的代码来为其命名,并编写自己的代码来获取其名称。