0

重複の可能性:
クラス __init__() 内でインスタンス名を取得する

私はこの小さな問題を解決しようとしています:

class Test(object):
    def __init__(self):
        print "hello: %s" % i_dont_know

b = Test()
c = Test()

結果として得たいもの:

hello: b
hello: c

変数名だけ。

id(self) が参照コードを返すことはわかっていますが、参照名を取得することは可能ですか?

4

3 に答える 3

1

いいえ、できません。BrenBarn の例以外にも、それが不可能である理由がもう 1 つあります。コンストラクターは、割り当てが行われる前に完全に実行されます。

バイトコードを見てください:

>>> class Test(object): pass
... 
>>> def make_instances():
...     a = Test()
...     b = Test()
... 
>>> import dis
>>> dis.dis(make_instances)
  2           0 LOAD_GLOBAL              0 (Test)
              3 CALL_FUNCTION            0
              6 STORE_FAST               0 (a)

  3           9 LOAD_GLOBAL              0 (Test)
             12 CALL_FUNCTION            0
             15 STORE_FAST               1 (b)
             18 LOAD_CONST               0 (None)
             21 RETURN_VALUE 

実行するのCALL_FUNCTIONはバイトコードです__init__STORE_FASTオブジェクトを識別子にバインドします。Python はバインディングと対話する方法を提供しないため、使用できる「特別な方法」はありません。

于 2013-02-05T21:23:34.993 に答える
1

おそらく次のようなことをするのが最善です

class Test:
    def __init__(name):
        self.name = name


    def __str__():
        return name


a = Test("a")

print a    
>>> a
于 2013-02-05T21:24:44.400 に答える
1

いいえ、できません。私がこれを行うとどうなりますか:

Test()

またはこれ:

someList[3] = Test()

またはこれ:

someList.append(Test())
于 2013-02-05T21:18:06.217 に答える