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 的例子之外,还有另一个无法克服的原因。构造函数在赋值发生之前完全执行。

看字节码:

>>> 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 回答