关于python:如何获取实例类的变量名?

How to get the variable name that instance the class?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Getting an instance name inside class __init__()

我正在努力解决这个小问题:

1
2
3
4
5
6
class Test(object):
    def __init__(self):
        print"hello: %s" % i_dont_know

b = Test()
c = Test()

我希望得到的结果是:

1
2
hello: b
hello: c

只是变量名。

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


最好做些像

1
2
3
4
5
6
7
8
9
10
11
12
13
class Test:
    def __init__(name):
        self.name = name


    def __str__():
        return name


a = Test("a")

print a    
>>> a

不,你不能。除了布伦巴恩的例子,还有另一个不可能的原因。构造函数在赋值发生之前完全执行。

看看字节码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> 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不提供任何与绑定交互的方法,因此没有可以使用的"特殊方法"。


不,你不能。如果我这样做呢:

1
Test()

或者:

1
someList[3] = Test()

或者:

1
someList.append(Test())