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