python:初学者不理解结果:用类附加列表

2024-06-10 20:51:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python初学者,不了解以下内容: 我定义了一个类和一个列表。当我想在添加列表后打印它时,我不会得到字符串,尽管我有一个方法可以返回字符串,对吗?我看不出这里出了什么问题我希望结果是[14,12]。。。 如果有人知道我做错了什么,请告诉我:/

class av:

    def __init__(self, num):
        self.num = num
    def __str__(self,num):
        self.num = num
        return str(self.num)

lst = []

lst.append(av(14))

lst.append(av(12))

print(lst)

结果:

[<__main__.av object at 0x102503dd0>, <__main__.av object at 0x102505d90>]

Tags: 方法字符串self列表定义objectmaindef
2条回答

首先,您的str方法有一些冗余。它应该是这样的:

def __str__(self):
    return str(self.num)

str方法实际上不应该接受除“self”和self.num = num之外的任何参数 已在您的init方法中声明,因此它不做任何事情

至于打印,当您将对象附加到列表中时,它实际上包含的是一个“指针”列表,或对存储对象数据的内存位置的引用。因此,当您试图打印出列表时,它只返回指向内存中那些位置的指针,这些位置在主文件中写为:av类的object,然后返回表示内存位置的十六进制代码。str方法仅在引用实际“指针”(对象本身)时有效。因此,如果要打印列表中的self.num值,可以使用for循环对其进行迭代:

for obj in lst:
    print(obj)

这样可以直接打印对象。如果您想让它们在同一行,只需将其更改为:print(obj, end = '')

__str__仅在使用print对象时使用,您可以使用__repr__在控制台(more details)上获得方便的“表示”:

>>> class av:
...     def __init__(self, num):
...         self.num = num
...     def __str__(self):
...         return str(self.num)
...     def __repr__(self):
...         return 'av(%d)' % self.num
... 
>>> av(12)
av(12)
>>> print(av(12))
12
>>> [av(12), av(12)]
[av(12), av(12)]
>>> print([av(12), av(12)])
[av(12), av(12)]

相关问题 更多 >