我怎么能在课堂上引用实例名称?

时间:2018-06-06 09:10:15

标签: python python-3.x class

在此代码中:

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>]

我怎么能解决它?

2 个答案:

答案 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使用对象引用的名称?