Python 对于抽象类,实例化的最佳方式是什么?

Python 对于抽象类,实例化的最佳方式是什么?,python,oop,overriding,abstract-class,abstract-methods,Python,Oop,Overriding,Abstract Class,Abstract Methods,从我迄今为止的理解来看,我注意到用我的话告诉我定义的正确性:我们应该在抽象类中声明我们的抽象方法,并将这些方法的实现引导到子类或派生类 现在我有一个问题: 在基类抽象类中实例化是有用的还是常见的? 或者,如果不是: 我们应该在派生的classchild类中进行实例化,还是在两者中都进行实例化 哪一个更适合做,或者说是pythonic 或者你可能会说没关系……如果是这样,请通知我为什么 例如,这: from abc import abstractmethod, ABC class Athlet

从我迄今为止的理解来看,我注意到用我的话告诉我定义的正确性:我们应该在抽象类中声明我们的抽象方法,并将这些方法的实现引导到子类或派生类

现在我有一个问题:

在基类抽象类中实例化是有用的还是常见的? 或者,如果不是:

我们应该在派生的classchild类中进行实例化,还是在两者中都进行实例化

哪一个更适合做,或者说是pythonic

或者你可能会说没关系……如果是这样,请通知我为什么

例如,这:

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,所以我应该在子类中进行实例化。。。。我说得对吗?