如何动态选择一个class实例化?

How to dynamically choose a class to instantiate?

我有三个 class 用于 DogBirdCat。每个都几乎一样。不合并为 Pet 中的一个 class - 是否可以从宠物列表中选择,然后将其命名为 class?我现在收到一个错误:

oPet = randoType(random.choice(names))
TypeError: 'str' object is not callable

我的代码:

    class Dog():
        """Dog class"""
    
        def __init__(self, name:str) -> None:
            """Initialize a dog"""
            self.name = name
    
        def speak(self):
            """Dog speaks"""
            return "bark, bark, bark"
    
        def getName(self):
            """Gets pet name"""
            return self.name
    
    ### OTHER CLASSES ALMOST SAME, NOT SHOWN

    names = [
    "Spencer",
    "Spike",
    "Stuart",
    "Tank",
    "Tanner"]
    
    petTypes = ['Dog', 'Cat', 'Bird'] 
    
    number_pets = random.randint(1,len(names))
    petSet = set()
    for x in range(1, number_pets):
        petSet.add(random.choice(names))

    listPets = list(petSet)
    oPets = [] 
    
    for x in range (1,6):
        randoType = random.choice(petTypes)
        oPet = randoType(random.choice(names))
        oPets.append(oPet)

randoType 是一个字符串,而不是 class。将 classes 本身而不是他们的名字放在 petTypes.

petTypes = [Dog, Cat, Bird]