美文网首页
抽象类和抽象方法

抽象类和抽象方法

作者: MononokeHime | 来源:发表于2018-07-13 21:18 被阅读0次

    抽象类是包含抽象方法的类,而抽象方法不包含任何可实现的代码,只能在其子类中实现抽象函数的代码。

    子类继承父类的成员变量和成员函数。

    1.定义抽象类

    在定义抽象类前需要从类库abc导入ABCmeta类(即Metaclass for defining Abstract BaseClasses,抽象基类的元类)和abstractmethod类。

    在定义抽象类时需要在类定义中加入如下代码:

    __metaclass__ = ABCmeta,即指定该类的元类是ABCmeta。所谓元类就是创建类的类。

    在定义抽象方法时需要在前面加入如下代码:

    @abstractmethod

    因为抽象方法不包含任何可实现的代码,因此其函数体通常使用pass。下面演示抽象类的实现和多态。所谓的多态指的是在抽象类中定义一个方法,可以在其子类中重新实现,不同子类中实现的方法也不尽相同。

    from abc import ABCMeta, abstractmethod
    
    #抽象类
    class Headers(object,metaclass=ABCMeta): # python3的写法
    
        def __init__(self):
            self.headers = ''
    
        @abstractmethod
        def _getBaiduHeaders(self):pass
    
    
    #实现类
    class BaiduHeaders(Headers):
        def __init__(self, url, username, password):
            self.url = url
            self.headers = self._getBaiduHeaders(username, password)
    
        def _getBaiduHeaders(self, username, password):
            client = GLOBAL_SUDS_CLIENT.Client(self.url)
            headers = client.factory.create('ns0:AuthHeader')
            headers.username = username
            headers.password = password
            headers.token = _baidu_headers['token']
            return headers
    

    如果子类不实现父类的_getBaiduHeaders方法,则创建实例对象的时候抛出TypeError: Can't instantiate abstract class BaiduHeaders with abstract methods 异常

    相关文章

      网友评论

          本文标题:抽象类和抽象方法

          本文链接:https://www.haomeiwen.com/subject/txudpftx.html