可能重复:
在类 __init__() 中获取实例名称
我正在尝试解决这个小问题:
class Test(object):
def __init__(self):
print "hello: %s" % i_dont_know
b = Test()
c = Test()
我想得到的结果是:
hello: b
hello: c
只是变量名。
我知道 id(self) 返回参考代码,是否可以获得参考名称?
可能重复:
在类 __init__() 中获取实例名称
我正在尝试解决这个小问题:
class Test(object):
def __init__(self):
print "hello: %s" % i_dont_know
b = Test()
c = Test()
我想得到的结果是:
hello: b
hello: c
只是变量名。
我知道 id(self) 返回参考代码,是否可以获得参考名称?
不,你不能。除了 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 不提供与绑定交互的任何方式,因此没有可以使用的“特殊方法”。
最好做类似的事情
class Test:
def __init__(name):
self.name = name
def __str__():
return name
a = Test("a")
print a
>>> a
不,你不能。如果我这样做怎么办:
Test()
或这个:
someList[3] = Test()
或这个:
someList.append(Test())