Как l oop через список экземпляров объектов в Python классах? - PullRequest
0 голосов
/ 01 августа 2020

Мне нужно создать список экземпляров объектов и l oop через объекты классов (Pet, Jumper, Dog, BigDog, SmallDog, Cat, HouseCat). Но эти объекты принадлежат к разным классам и имеют разные методы. Основная часть выводит результат, как и ожидалось, но я не знаю, чтобы изменить его на список объектов и l oop через них. Не могли бы вы мне помочь? Спасибо. Мой код выглядит следующим образом (вы можете игнорировать часть класса, просто сосредоточьтесь на основной части):

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 Ответ

2 голосов
/ 01 августа 2020

Возможно, вы можете создать дополнительный метод, который в каждом классе имеет одну и ту же сигнатуру, но имеет другую реализацию. Тогда вы можете позвонить по этому поводу в for l oop.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...