如何在Python类中遍历实例化的对象列表?

时间:2020-08-01 04:54:36

标签: python list loops class object

我需要创建一个实例化对象的列表,并遍历类的对象(宠物,跳线,狗,大狗,小狗,猫,家猫)。但是这些对象属于不同的类并且具有不同的方法。主要部分按预期方式打印结果,但是我不知道将其更改为对象列表并遍历它们。请你帮助我好吗?谢谢。我的代码如下(您可以忽略类的一部分,只关注主体部分):

class Pet:
"""
insert a class docstring
"""
# Create two variables kind and color; assign value
    kind = "animal"
    color = "brown"

    def __init__(self, name):
    """
    Constructor for Pet
    """
    # In the constructor, initialize the pets name
        self.name = name

    def __str__(self):
    """
    insert a method docstring
    """

    # Print the name and description of pet so that it matches the
    # sample output from assignment
        print("I am a " + Pet.color + " animal named " + self.name)
        print(self.kind + "\n" + self.color)

    def do_tricks(self):
    """
    insert a method docstring
    """

    # Print the name of the pet and that it is doing tricks
        print(self.name + " is doing tricks")

    # Call the speak method
    # self.speak()

    # Call the jump method
    # self.jump()

    def speak(self):  # this will be overridden - leave as is
        pass

    def jump(self):   # this will be overridden - leave as is
        pass


class Jumper(Pet):
"""
This is a mixin class for jump
"""

    def jump(self):
    """
    insert a method docstring
    """
    # Print pet's name and that the Pet is jumping
        print(self.name + " is jumping")


class Dog(Jumper):    
"""
insert a Class docstring
"""

# Change kind to canine
    kind = "canine"

    def __str__(self):
    """
    insert the method docstring
    """

    # Print the name and a description of dog so that it matches the
    # sample output from assignment
        print("I am a dog named " + self.name)
        print(self.kind + "\n" + self.color)

    def __call__(self):
    """
    insert a method docstring
    """

    # Rollover action prints the name of the dog and that it is rolling
    # over
        print(self.name + " is rolling over")
    # Owner action returns the name of the owner
        print("My owner is George")


class BigDog(Dog):    
"""
insert a Class docstring
"""

# Change the color to tan
    color = "tan"

    def __str__(self):
    """
    insert a method docstring
    """
    # Print the name and description of BigDog so that it matches the
    # sample output from assignment
        print(self.name + " is a large, muscular dog ")
        print(self.kind + "\n" + self.color)

    def speak(self):
    """
    insert a method docstring
    """

    # Print dogs name and what it says
        print(self.name + " says Woof!!!")


class SmallDog(Dog):    
"""
insert a Class docstring
"""

# Change the color to brindle
    color = "brindle"

    def __str__(self):
    """
    insert a method docstring
    """

    # Print the name and description of SmallDog so that it matches the
    # sample output from assignment
        print(self.name + " is a tiny, cute dog")
        print(self.kind + "\n" + self.color)

    def speak(self):
    """
    insert a method docstring
    """
    # Print dogs name and what it says
        print(self.name + " says Yip!")


class Cat(Jumper):     
"""
insert a Class docstring
"""

# Change the kind to feline
    kind = "feline"

    def __str__(self):
    """
    insert a method docstring
    """
    # Print the name and description of cat so that it matches the
    # sample output from assignment
        print("I am a cat named " + self.name)
        print(self.kind + "\n" + self.color)

    def speak(self):
    """
    insert a method docstring
    """
    # Print cats name and what it says
        print(self.name + " says Meow!!!")

    def climb(self):
    """
    insert a method docstring
    """
    # Print the name of the cat and that it is climbing
        print(self.name + " is climbing the curtains again")


class HouseCat(Cat):     
"""
insert a Class docstring
"""
# Change the color to white
    color = "white"

    def __str__(self):
    """
    insert a method docstring
    """
    # Print the name and description of the house cat so that it matches
    # the sample output from assignment
        print(self.name + " is a cat with fluffy, " + self.color + " fur")
        print(self.kind + "\n" + self.color)

    def speak(self):
    """
    insert a method docstring
    """
    # Print cats name and what it says
        print(self.name + " says Purr")enter code here

print(__name__)
if __name__ == "__main__":

    my_pet = Pet("Rover")
    my_pet.__str__()
    my_pet.do_tricks()
    print("-----------------------------------")

    my_cat = Cat("Lion")
    my_cat.__str__()
    my_cat.do_tricks()
    my_cat.speak()
    my_cat.jump()
    my_cat.climb()
    print("-----------------------------------")

    my_dog = Dog("Roo")
    my_dog.__str__()
    my_dog.do_tricks()
    my_dog.jump()
    my_dog.__call__()
    print("-----------------------------------")

    my_big_dog = BigDog("Noah")
    my_big_dog.__str__()
    my_big_dog.do_tricks()
    my_big_dog.speak()
    my_big_dog.jump()
    my_big_dog.__call__()
    print("-----------------------------------")

    my_small_dog = SmallDog("Lucky")
    my_small_dog.__str__()
    my_small_dog.do_tricks()
    my_small_dog.speak()
    my_small_dog.jump()
    my_small_dog.__call__()
    print("-----------------------------------")

    my_house_cat = HouseCat("Zebra")
    my_house_cat.__str__()
    my_house_cat.do_tricks()
    my_house_cat.speak()
    my_house_cat.jump()
    my_house_cat.climb()
    print("-----------------------------------")

1 个答案:

答案 0 :(得分:2)

也许您可以创建一个附加方法,该方法在每个类中共享相同的签名,但实现方式不同。然后,您可以在for循环中调用它。

class Dog:
    # ...
    def perform(self):
        self.do_tricks()
        self.jump()

class HouseCat:
    # ...
    def perform(self):
        self.do_tricks()
        self.speak()
        self.jump()
        self.climb()

# ...

if __name__ == '__main__':
    animals = [   # make a list of animals
       Pet("Rover"),
       Cat("Lion"),
       # ...
    ]
    for animal in animals:  # call on a shared method on each animal
        animal.perform()
相关问题