在类的str()函数中使用实例名称

时间:2019-04-30 15:19:10

标签: python python-3.x

我写了一个关于笛卡尔系统中点的类(每个点实例都具有横坐标和纵坐标),每个实例都有其名称,例如,我们有点“ A”(坐标(2,3))和“ B”(坐标) (1,2))。 在 str ()函数中,我需要使用实例的名称来获得良好的输出。 例如,当我使用打印命令(print(A))时,我需要程序打印出来(A的横坐标为2) 当在主脚本中写入(print(B))时显示(B的横坐标为1)。 主要问题是显示实例的名称。 有没有返回某个类实例名称的函数?

我尝试在init()函数中使用self.namehex(id(self)),然后使用self.name(),但没有成功

2 个答案:

答案 0 :(得分:0)

正如@chepner所说,对象不知道为其分配的名称。

如果您想让Point类知道其实例名称,请将其作为自变量添加到__init__()

class Point(object):
    def __init__(self, name, x, y):
        self.name = name
        ...

    def __str__(self):
        return 'abcissa of %s is ...' % self.name

a = Point('a', 50, 100)

答案 1 :(得分:0)

您需要实现 repr str 方法。在对象上使用打印时使用 repr ,在使用str(object)时使用 str

class SomeClass:

def __init__(self, name, x, y):
    self.name = name
    self.x = x
    self.y = y

def __repr__(self):
    return f'abscissa of name: {self.name}  is...'

def __str__(self):
    return f'abscissa of name: {self.name}  is...'

输出:

a = SomeClass('name',4,6) b = SomeClass('name2',9,8)

a 名称的横坐标:名称为... b 名称的横坐标:name2是... str(a) “名字的横坐标:名字是...” str(b) “名称的横坐标:name2是...”