在Python中打印类中的列表

时间:2016-11-09 13:11:03

标签: python class

我的简化代码如下:它创建一个动物,并将其放置在动物园内。我想打印动物园里的动物名单。用这个围成一圈!

class Animal(object):

    def __init__(self, name):
        self.name = name

class Zoo(object):

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

    def __str__(self):
        rep = ", ".join(self.animals)
        return rep

    def add(self, name):
        self.animals.append(Animal(name))

def main():

    while True:
        zoo = Zoo()
        animal = input("add an animal: ")
        zoo.add(animal)
        print(zoo)

main()

2 个答案:

答案 0 :(得分:2)

向Animal添加的__repr__方法会返回名称。

zoo = Zoo()必须在循环之外,这确保我们不会在每次迭代时创建一个新的动物园。

然后我们打印列表(zoo.animals)。

class Animal(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return self.name



class Zoo(object):
    def __init__(self):
        self.animals = []
    def __str__(self):
        rep = ", ".join(self.animals)
        return rep
    def add(self, name):
        self.animals.append(Animal(name))



def main():
    zoo = Zoo()
    while True:
        animal = input("add an animal: ")
        zoo.add(animal)
        print(zoo.animals)


main()

答案 1 :(得分:1)

您可以在name中简单地引用Animal的{​​{1}}属性,例如:

Zoo.__str__()

现在def __str__(self): return ', '.join(animal.name for animal in self.animals) 应该可以正常工作。

然而,如果你想改变打印动物的意义,这并没有提供很多的封装,例如:高度,大小等。所以也许更封装的形式是:

print(zoo)

现在当你class Animal(object): ... def __str__(self): return self.name class Zoo(object): ... def __str__(self): return ", ".join(str(animal) for animal in self.animals) print(zoo)班负责自己的字符串演示时 就像一个注释:你可能应该在Zoo之外创建Animal实例,如果你决定创建一个具有不同行为的Animal s(例如Animal)的类层次结构会发生什么,你的{{1 } class只会知道Mammal s。

Zoo

如果您创建Animal类:

,这仍然可以正常运行
class Animal(object):
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return self.name

class Zoo(object):
    def __init__(self):
        self.animals = []
    def __str__(self):
        return ", ".join(str(animal) for animal in self.animals)
    def add(self, animal):
        self.animals.append(animal)

def main():
    zoo = Zoo()
    while True:
        animal = Animal(input("add an animal: "))
        zoo.add(animal)
        print(zoo)

main()