python 类的特殊装饰器

163 阅读2分钟

1、property

用于将类方法转换为属性调用,从而实现对类属性的更加灵活的访问控制和管理。 在 Python 中,通过 property 装饰器可以将类方法定义为属性,使得该方法在被访问时可以像访问普通属性一样,而不需要显式地调用方法。通常情况下,property 装饰器需要与另外两个方法配合使用:

  1. getter 方法:用于获取属性值的方法。
  2. setter 方法:用于设置属性值的方法(可选)。
  3. deleter 方法:用于删除属性值的方法(可选)。

示例:

class People:
    def __init__(self,name):
        self.__name=name

    @property
    def name(self):
        # print('getter')
        return self.__name

    @name.setter
    def name(self,val):
        # print('setter',val)
        if not isinstance(val,str):
            print('名字必须是字符串类型')
            return
        self.__name=val

    @name.deleter
    def name(self):
        print('deleter')

        print('不允许删除')
        del self.__name # 如果不加这个方法,就不能删除


p=People('xxx')
del p.name

2、绑定方法与非绑定方法

@classmethod 装饰器是将方法定义为类方法,__init__ 里面关于初始化的变量访问不到,也不存在实例对象。

@staticmethod 装饰器是将方法定义为静态方法,静态方法是不依赖类实例的,即可以通过类型进行访问 。

3、ABC 模块

abc 模块是 Python 标准库中的一个模块,它提供了抽象基类(Abstract Base Class,ABC)的支持。抽象基类是一种特殊的类,它不能被实例化,只能被继承,用于定义子类必须实现的方法接口。

1、特点:

使用 abc 模块可以定义抽象基类,这些基类可以包含抽象方法(即只有方法签名而没有具体实现的方法),强制要求继承者实现这些方法。

2、@abstractmethod 装饰器

abc 模块中的 abstractmethod 装饰器用于标记抽象方法,子类必须实现这些被标记的方法。

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        print("Woof")

class Cat(Animal):
    def make_sound(self):
        print("Meow")