如何获取实例类的变量名?

时间:2013-02-05 21:14:26

标签: python class object

  

可能重复:
  Getting an instance name inside class __init__()

我正在尝试解决这个问题:

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

b = Test()
c = Test()

我希望得到的结果是:

hello: b
hello: c

只需变量名称。

我知道id(self)返回引用代码,可以获取引用名称吗?

3 个答案:

答案 0 :(得分:1)

不,你不能。如果我这样做会怎么样:

Test()

或者这个:

someList[3] = Test()

或者这个:

someList.append(Test())

答案 1 :(得分: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没有提供任何与绑定交互的方法,因此没有可以使用的“特殊方法”。

答案 2 :(得分:1)

最好做一些像

这样的事情
class Test:
    def __init__(name):
        self.name = name


    def __str__():
        return name


a = Test("a")

print a    
>>> a