4

次のコードを使用してインスタンスを収集しています。

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 の各インスタンスのインスタンス名にアクセスするにはどうすればよいですか?

4

4 に答える 4

7

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"

。。。ただし、これらの名前は特別なものでも「自動」のものでもありません。

肝心なのは、何かに名前を付けたい場合は、その名前の処理方法を決定する必要があるということです名前を付ける独自のコードと、名前を取得する独自のコードを作成する必要があります。

于 2012-08-26T03:18:42.450 に答える
1

foo = Foo()変数fooは によって返されるオブジェクトを指すだけであることを意味しFoo()ます。ここには名前の概念はありません。

于 2012-08-26T03:16:16.703 に答える
0

foo.__dict__" hand1" と " hand2" のキーがあります (特に)。しかし、あなたはおそらくこれについて間違った方法で進んでいます。Foo名前が重要な場合は、 (またはどこかで) 明示的なインデックスとして使用する必要があります。

例えば

class Foo():
    def __init__(self):
        self.hands = {}

    def insty(self):
        self.hands['hand1'] = Hand()
        self.hands['hand2'] = Hand()
于 2012-08-26T03:16:39.337 に答える