@abstractmethod:抽象方法(转载)

@abstractmethod:抽象方法,含abstractmethod方法的类不能实例化,继承了含abstractmethod方法的子类必须复写所有abstractmethod装饰的方法,未被装饰的可以不重写
@ property:方法伪装属性,方法返回值及属性值,被装饰方法不能有参数,必须实例化后调用,类不能调用
@ classmethod:类方法,可以通过实例对象和类对象调用,被该函数修饰的方法第一个参数代表类本身常用cls,被修饰函数内可调用类属性,不能调用实例属性
@staticmethod:静态方法,可以通过实例对象和类对象调用,被装饰函数可无参数,被装饰函数内部通过类名.属性引用类属性或类方法,不能引用实例属性



案例讲解:

@abstractmethod
用于程序接口的控制,正如上面的特性,含有@abstractmethod修饰的父类不能实例化,但是继承的子类必须实现@abstractmethod装饰的方法

# -*- coding:utf-8 -*-

from abc import ABC, abstractmethod

class **A**(**ABC**):

@abstractmethod
def **test**(self):
pass

class **B**(**A**):

def **test_1**(self):
print("未覆盖父类abstractmethod")

class **C**(**A**):

def **test**(self):
print("覆盖父类abstractmethod")

if __name__ == '__main__':
a = A()
b = B()
c = C()
前两个分别报错如下:
a = A()
TypeError: Can't instantiate abstract class A with abstract methods test

b = B()
TypeError: Can't instantiate abstract class **B** **with** **abstract** **methods** **test**
第三个实例化是正确的

 

转载于:Python装饰器abstractmethod、property、classmethod、staticmethod及自定义装饰器
posted @ 2020-04-26 17:52  三年一梦  阅读(2293)  评论(0编辑  收藏  举报