我想做类似下面的事情。但是我不确定的一件事是,“ expected_limbs”仅存在于具体的类中。我有一个方法在“宠物”类中引用“ expected_limbs”,但实际上没有该属性。这在运行时应该没问题,但是我很好奇,如果不是,那么正确的方法是什么?我总是可以在抽象类中将其设置为“无”,但看起来并不完美。
from abc import ABC, abstractmethod
class Pet(ABC):
def __init__(self, name, limbs):
self.name = name
self.limbs = limbs
def has_all_limbs(self):
for limb, limb_count in self.expected_limbs.items():
if self.limbs[limb] != limb_count:
return False
else:
return True
@abstractmethod
def speak(self):
pass
class Dog(Pet):
def __init__(self, name, limbs):
super().__init__(name, limbs)
self.expected_limbs = {"legs": 4}
def speak(self):
print("Bark")
class Bird(Pet):
def __init__(self, name, limbs):
super().__init__(name, limbs)
self.expected_limbs = {"legs": 2, "wings": 2}
def speak(self):
print("Chirp")
运行时还可以。
toucan = Bird("Sam", {"legs": 2, "wings": 1})
print(toucan.has_all_limbs())
False