阿里山QQ

导航

python抽象方法

1.抽象方法的概念

之前我们定义一个基类的时候,如果要求子类必须重写父类中的某一个方法,可以这样做:

定义一个名为Pizza的基类,让其get_radius方法必须被子类继承

class Pizza(object):
    @staticmethod
    def get_radius():
        raise NotImplementedError

如果子类没有重写该方法就会触发错误

class Sub_Pizza(Pizza):
    pass
Sub_Pizza().get_radius()

错误信息如下:
    raise NotImplementedError
NotImplementedError

但是上述方法的缺点是:如果只实例化了子类,而没有调用方法,NotImplementedError就不会被触发;

 

抽象方法允许我们在类实例化的同时,通过触发异常来告诉我们那些父类中的方法是必须在子类中重写的,而不需要调用方法才可以知道哪些方法是必须要被重写的;

 

2.抽象方法的实现

抽象方法的实现使用abc模块实现

定义基类,并指定其中的抽象方法(必须在子类中被重写)

import abc

class BasePizza(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def get_radius(self):
        """Return the ingredient list"""

 

定义子类继承上述类:

class DietPizza(BasePizza):
    pass
DietPizza()

执行结果:
TypeError: Can't instantiate abstract class DietPizza with abstract methods get_radius

由于在子类中没有重写方法get_radius,在实例化子类的时候,报TypeError;

 

正确代码如下:

class DietPizza(BasePizza):

    @staticmethod
    def get_radius(self):
        return None
DietPizza()

 

posted on 2017-03-24 15:49  阿里山QQ  阅读(263)  评论(0编辑  收藏  举报