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

时间:2020-04-16 02:30:51

标签: python oop

我有一个用于创建列表对象并处理列表动作的列表类,还有一个用于创建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>]

3 个答案:

答案 0 :(得分:2)

__str__实现__repr__Dog,因此Python知道如何表示它。

class Dog:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    def __repr__(self):
        return f"Dog({self.__name}, {self.__age})"
    def __str__(self):
        return f"Woof! I'm {self.__name}, and I'm {self.__age} years old!"

有关__str____repr__的更多信息,请参见here

答案 1 :(得分:0)

您应该能够像下面那样访问对象(因为这些属性被定义为“私有”,您不能直接访问它们)。

for item in doglist.lista:
    print(item.__dict__['_Dog__name'])
    print(item.__dict__['_Dog__age'])

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

答案 2 :(得分:-1)

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)]