在Python 3中,我将Animal
类作为抽象基类,并使用抽象方法give_name(self)
。派生类包括 Dog
和 Cat
。
give_name()
方法的内容开头在不同的子类中可能不同。例如,在 Dog
子类中,可能有 print("bark")
,而在 Cat
子类中,可能有 打印(“喵”)
。
但是,我想确保在所有派生类中,give_name()
以 return self.__class__.__name__
结尾。我怎样才能强制执行这个约束(尽可能优雅地)?
当前代码:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def give_name(self):
pass
class Dog(Animal):
def give_name(self):
print("bark")
return self.__class__.__name__
class Cat(Animal):
def give_name(self):
print("meow")
return self.__class__.__name__
最佳答案
您可以在父类(super class)中实现give_name()
,但将打印部分委托(delegate)给子类,例如
from abc import ABC, abstractmethod
class Animal(ABC):
def give_name(self):
self.print()
return self.__class__.__name__
@abstractmethod
def print(self):
pass
class Dog(Animal):
def print(self):
print("bark")
class Cat(Animal):
def print(self):
print("meow")
关于Python:确保所有子类方法返回相同的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57612447/