Python 对于抽象类,实例化的最佳方式是什么?
从我迄今为止的理解来看,我注意到用我的话告诉我定义的正确性:我们应该在抽象类中声明我们的抽象方法,并将这些方法的实现引导到子类或派生类 现在我有一个问题: 在基类抽象类中实例化是有用的还是常见的? 或者,如果不是: 我们应该在派生的classchild类中进行实例化,还是在两者中都进行实例化 哪一个更适合做,或者说是pythonic 或者你可能会说没关系……如果是这样,请通知我为什么 例如,这:Python 对于抽象类,实例化的最佳方式是什么?,python,oop,overriding,abstract-class,abstract-methods,Python,Oop,Overriding,Abstract Class,Abstract Methods,从我迄今为止的理解来看,我注意到用我的话告诉我定义的正确性:我们应该在抽象类中声明我们的抽象方法,并将这些方法的实现引导到子类或派生类 现在我有一个问题: 在基类抽象类中实例化是有用的还是常见的? 或者,如果不是: 我们应该在派生的classchild类中进行实例化,还是在两者中都进行实例化 哪一个更适合做,或者说是pythonic 或者你可能会说没关系……如果是这样,请通知我为什么 例如,这: from abc import abstractmethod, ABC class Athlet
from abc import abstractmethod, ABC
class Athlete(ABC):
def __init__(self, name: str, mass: int, height: int, nationality: str):
self.name = name
self.mass = mass
self.height = height
self.nationality = nationality
@abstractmethod
def run(self):
pass
def play(self):
pass
def exercise(self):
pass
def sleep(self):
pass
class SoccerPlayer(Athlete):
def run(self):
print(f"{self.name} is running")
def play(self):
print(f"{self.name} with {self.height} is running to save his {self.nationality} nation.")
def exercise(self):
print(f"{self.name} is exercising to fit his {self.mass}")
def sleep(self):
print(f"{self.name} is sleeping 8 h a day to increase his {self.height}m height.")
player = SoccerPlayer('ali', 200, 180, 'american')
player.run()
始终对派生类进行实例化
因为尽管您在基类中执行实例化,但您将继承派生类中的那些属性和方法,但也考虑到这一点,您可能想要重写在BASIC类抽象类中实例化的属性。在那个时候,你们需要在抽象类中快速修改你们的属性,这不是一个好主意
因此,在子类而不是抽象类中实例化属性。始终对派生类进行实例化
因为尽管您在基类中执行实例化,但您将继承派生类中的那些属性和方法,但也考虑到这一点,您可能想要重写在BASIC类抽象类中实例化的属性。在那个时候,你们需要在抽象类中快速修改你们的属性,这不是一个好主意
因此,在子类而不是抽象类中实例化属性。对于测试,实例化抽象基类可能很方便。这也相当简单。但是,不要在生产代码中这样做 你所需要做的就是空荡荡的运动员__ >>>运动员鲍勃,100,200,美国人 回溯最近一次呼叫上次: 文件,第1行,在 TypeError:无法在运行抽象方法的情况下实例化抽象类 >>>运动员__ 冻结集{'run'} >>>运动员。抽象方法=冻结 >>>运动员鲍勃,100,200,美国人 对于测试,实例化抽象基类可能很方便。这也相当简单。但是,不要在生产代码中这样做 你所需要做的就是空荡荡的运动员__ >>>运动员鲍勃,100,200,美国人 回溯最近一次呼叫上次: 文件,第1行,在 TypeError:无法在运行抽象方法的情况下实例化抽象类 >>>运动员__ 冻结集{'run'} >>>运动员。抽象方法=冻结 >>>运动员鲍勃,100,200,美国人抽象基类的全部要点是不实例化它。@user10987432,所以我应该在子类中进行实例化。。。。我说的对吗?抽象基类的全部要点是不实例化它。@user10987432,所以我应该在子类中进行实例化。。。。我说得对吗?