zoukankan      html  css  js  c++  java
  • python 抽象类、抽象方法的实现

    ABC 是一些不能被实例化的类。Python 3 添加了一个新的框架 —abc— 它提供了对 ABC 的支持。这个 abc 模块具有一个元类(ABCMeta)和 修饰符(@abstractmethod 和 @abstractproperty)。如果一个 ABC 具有一个 @abstractmethod或 @abstractproperty,它就不能被实例化,但必须在一个子类内被覆盖。比如,如下代码:

    #-*- coding:utf-8 -*-
    from abc import ABCMeta,abstractmethod
    
    #抽象类
    class A(object):
        __metaclass__ = ABCMeta
    
        @abstractmethod
        def fun(self):pass
    
        @abstractmethod
        def _f(self):pass
    
        # @abstractmethod 私有方法不能是抽象方法
        def __f(self): pass
    #实现类
    class B(A):
    
        def fun(self,name):
            print 'B for %s'%name
    
        def _f(self,name):
            print 'B for %s'%name
    
        def __f(self,name):
            return 'B for %s'%name
    
        def do(self,name):
            print self.__f(name)
    
    #a=A() 抽象类无法实例化
    b=B()
    b.fun('ybf')
    b.fun('yyj')
    #b.__f() 无法调用
    b.do('ybf&yyj')

    输出:

    B for ybf
    B for yyj
    B for ybf&yyj

    如果子类不实现父类的方法,则会报错。如果不清楚_、__、__xx__的差别,看这里:python _、__、__xx__之间的差别

  • 相关阅读:
    19. 删除链表的倒数第 N 个结点
    相交链表
    环形链表2
    环形链表
    K8s 网络通讯
    Hutool-二维码生成
    Hutool-加解密
    Hutool-解析JSON
    Hutool-读取配置文件中的配置
    Hutool-操作图片
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/9026653.html
Copyright © 2011-2022 走看看