我写了一个关于笛卡尔系统中点的类(每个点实例都具有横坐标和纵坐标),每个实例都有其名称,例如,我们有点“ A”(坐标(2,3))和“ B”(坐标) (1,2))。 在 str ()函数中,我需要使用实例的名称来获得良好的输出。 例如,当我使用打印命令(print(A))时,我需要程序打印出来(A的横坐标为2) 当在主脚本中写入(print(B))时显示(B的横坐标为1)。 主要问题是显示实例的名称。 有没有返回某个类实例名称的函数?
我尝试在init()函数中使用self.namehex(id(self)),然后使用self.name(),但没有成功
答案 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是...”