Python 如何打印存储对象的对象列表的属性?

Python 如何打印存储对象的对象列表的属性?,python,oop,Python,Oop,我有一个列表类,用于创建列表对象和处理列表操作,还有一个类“Dog”用于创建Dog对象。但是,在将“Dog”类型的对象附加到“Dogslist”类型的列表之后,我无法打印“Dog”类(名称和年龄)的属性。而是通过打印列表来打印对象的地址。如何打印列表中所有狗的姓名和年龄 class Dogslist(): def __init__(self): self.lista = [] def append(self, object): self.lista.append(ob

我有一个列表类,用于创建列表对象和处理列表操作,还有一个类“Dog”用于创建Dog对象。但是,在将“Dog”类型的对象附加到“Dogslist”类型的列表之后,我无法打印“Dog”类(名称和年龄)的属性。而是通过打印列表来打印对象的地址。如何打印列表中所有狗的姓名和年龄

class Dogslist():

  def __init__(self):
    self.lista = []

  def append(self, object):
    self.lista.append(object)

  def delete(self):
    pass

  def showlist(self):
    pass


class Dog:

  def __init__(self, name, age):
    self.__name = name
    self.__age = age

  def description(self):
    return self.__name, self.__age


a=Dog("Geralt", 10)
b=Dog("Vesemir", 13)

doglist = Dogslist()

doglist.append(a)
doglist.append(b)
print(doglist.lista)
输出显示以下对象的地址:

[<__main__.Dog object at 0x7f25ed30c0a0>, <__main__.Dog object
 at 0x7f25ed2f18b0>]
[,]

实现
\uuuuu str\uuuuuuuuu
\uuuu repr\uuuuuuuuu
,以便Python知道如何表示它

class狗:
定义初始(自我、姓名、年龄):
self.\uu name=名称
自我。年龄=年龄
定义报告(自我):
返回f“Dog({self.\uu name},{self.\uu age})”
定义(自我):
返回f“汪!我是{self.\u name},我是{self.\u age}岁!”

有关
\uuuu str\uuuu
\uuu repr\uuuu
的更多信息,请参见您应该能够访问以下对象(因为这些属性被定义为“private”,您无法直接访问它们)

更简单的方法是不将这些属性设为私有。这样您就可以像item.name一样访问它

class Dogslist():

  def __init__(self):
    self.lista = []

  def append(self, objectt):
    self.lista.append(objectt)

  def delete(self):
    pass

  def showlist(self):
    return(self.lista)
Dogslist.lista
技术上只存在于类中,因此不能从外部调用它。该类中需要一个返回
Dogslist.lista

class Dog:

  def __init__(self, name, age):
    self.__name = name
    self.__age = age

  def description(self):
    return self.__name, self.__age


a=Dog("Geralt", 10)
b=Dog("Vesemir", 13)

doglist = Dogslist()
狗也一样

doglist.append(a.description())
doglist.append(b.description())
print(doglist.showlist())
结果:

[('Geralt', 10), ('Vesemir', 13)]

“Dogslist.lista技术上只存在于类中,因此您不能从外部调用它。”不,这是完全错误的,您根本不需要函数。这是从
对象继承的任何对象的默认字符串表示形式,如果您希望自己的
\uuuu repr\uuuuu
不包含任何其他内容,则必须定义自己的
\uuuu repr\uuuuuuuuu>。另外,如果您不希望双下划线名称混乱,请不要使用双下划线名称混乱。为什么要使用它?@juanpa.arrivillaga我只使用了双下划线,因为我想使用私有变量进行封装。我在某个地方读到,在变量名之前写双下划线使该变量成为私有变量。否则,我永远不会使用双下划线,但只会使用u_urepr_u_u实现。我也尝试过定义str,但仍然返回地址。谢谢!我想将Dog的两个属性(name和age)返回到两个不同的变量中,同时创建一个包含所有Dog的名称和年龄的列表。我如何做到这一点?只需使用正常的列表结构即可<代码>狗名=[d.\U狗名列表中d的狗名];dog_ages=[d.\U在dog_列表中的d的年龄]
使用uu dict\u,我可以将姓名存储在姓名列表中,将年龄存储在年龄列表中,非常感谢@爱默生
[('Geralt', 10), ('Vesemir', 13)]