在此代码中:
class X:
def __init__(self, y=None):
self.y = y
self.z = []
try:
y.z.append(self)
except:
pass
a = X()
b = X(a)
c = X(a)
print(a.z)
我想打印[b,c],但它会打印出类似这样的内容
out: <__main__.x object at 0x01775E70>, <__main__.x object at 0x01775E90>]
我怎么能解决它?
答案 0 :(得分:1)
不可能*。名称单向引用值。你不能从一个值到一个名字。考虑许多引用相同值的名称,例如a = b = 1
。值1
的 true 名称是什么?没有,所有名字都是平等的。
*不检查源代码。正如我所说,如果您再分配a.z
,那么c = b
的显示方式会怎样?你要做的事情是徒劳无功,如果你真的需要它,你就会遇到设计问题。
答案 1 :(得分:0)
如果您希望print
显示对象的文本,则需要实现__str__方法:
class X:
def __init__(self, name, y=None):
self.name = name
self.y = y
self.z = []
try:
y.z.append(self)
except:
pass
def __repr__(self):
return self.name
a = X("a")
b = X("b", a)
c = X("c", a)
print(a.z)
或者您是否希望print使用对象引用的名称?