0

I need to create a list of instantiated objects and loop through the objects of classes(Pet, Jumper, Dog, BigDog, SmallDog, Cat, HouseCat). But these objects are belonged to different classes and have different methods. The main part print the result as expected, but I have no idea to change it to a list of objects and loop through them. Could you please help me? Thanks. My code is as follows(you can ignore the class part, just focus on the main part):

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("-----------------------------------")
3
  • If i understood your question correctly then just you need to store object reference in the list. Commented Aug 1, 2020 at 4:59
  • The same way you loop through any list, there's nothing special about objects that are instances of user-defined classes, everything is an object in Python. So you just loop through your list, for item in my_list: ... Commented Aug 1, 2020 at 5:04
  • I don't understand what you want to do. Show me your try as the code first. Commented Aug 1, 2020 at 5:35

1 Answer 1

2

Perhaps you can make an additional method that in each class that shares the same signature, but has different implementation. Then you can call on that in the for loop.

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()
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you so much, dear Ederic. It is exactly what I want and ran as expected. Good to learn this new knowledgr.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.