我正在尝试解决这个小问题:
class Test(object):
def __init__(self):
print "hello: %s" % i_dont_know
b = Test()
c = Test()
我希望得到的结果是:
hello: b
hello: c
只需变量名称。
我知道id(self)返回引用代码,可以获取引用名称吗?
答案 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