python抽象基类

Python013

python抽象基类,第1张

有时,我们抽象出一个基类,知道要有哪些方法,但只是抽象方法,并不实现功能,只能继承,

而不能被实例化,但子类必须要实现该方法。

 但是注意,实例化Base,仍然是报错的,因为抽象基类只能继承而不能实例化,子类要实例化

必须先实现该方法。

为了理解抽象基类,你可以这样想,我们有水果这个抽象基类,有苹果,香蕉,桃子类等,但你永远只能

吃得到苹果,桃子这些,而不能吃到所谓的“水果”。

参考

https://blog.csdn.net/qq_42210792/article/details/95192654

抽象方法是基类中定义的方法,但却没有任何实现。在java中,可以把方法申明成一个接口。而在python中实现一个抽象方法的简单的方法是:\x0d\x0aclass Sheep(object):\x0d\x0adef get_size(self):\x0d\x0araise NotImplementedError\x0d\x0a任何从Sheep继承下来的子类必须实现get_size方法。否则就会产生一个错误。但这种实现方法有个缺点。定义的子类只有调用那个方法时才会抛错。这里有个简单方法可以在类被实例化后触发它。使用python提供的abc模块。\x0d\x0aimport abc\x0d\x0aclass Sheep(object):\x0d\x0a__metaclass__ = abc.ABCMeta\x0d\[email protected]\x0d\x0adef get_size(self):\x0d\x0areturn\x0d\x0a这里实例化Sheep类或任意从其继承的子类(未实现get_size)时候都会抛出异常。\x0d\x0a因此,通过定义抽象类,可以定义子类的共同method(强制其实现)。

-- 如上所示:

-- duck、bird、dog 分别来自三个不同的类,而且类之间是 没有继承关系 的;

-- duck、bird、dog 调用 animal_quack 方法,得到三种不同的结果,符合多态的特征;

-- 强制要求父类被子类继承,并在子类实现某个方法,否则子类初始化时就会报错;