Python 四大常用装饰器最全对比

发布时间:2026/5/20 16:21:21

Python 四大常用装饰器最全对比 Python 四大常用装饰器最全对比abstractmethod/classmethod/staticmethod/property定义、用法、参数、场景、区别、面试题一次性吃透一、总览对照表装饰器传参第一个访问对象访问类能否实例调用核心用途abstractmethod无否否不能直接实例定义抽象接口强制子类重写classmethodcls不能能类/实例都可操作类属性工厂方法staticmethod无不能不能类/实例都可纯工具函数和类无关propertyself能不能实例调用把方法变成属性只读/封装1. abstractmethod 抽象方法所属模块from abc import ABC, abstractmethod作用定义接口规范只声明不实现强制子类必须重写否则无法实例化抽象类不能直接创建对象语法fromabcimportABC,abstractmethodclassAnimal(ABC):abstractmethoddefcry(self):pass特点无默认第一个参数不能实例化基类用来做设计模式基类工厂、策略、模板场景统一接口、插件规范、开闭原则2. classmethod 类方法作用绑定类不绑定实例第一个参数固定cls代表当前类可以修改类变量语法classUser:count0classmethoddefadd_user(cls):cls.count1print(当前人数,cls.count)# 类直接调用User.add_user()# 实例也能调用uUser()u.add_user()特点只能访问类属性/类方法不能访问实例属性self.xxx常用场景工厂方法、批量创建对象、类全局统计3. staticmethod 静态方法作用和类、实例都无关就是一个普通函数不需要默认参数无 self / 无 cls只是挂在类里方便管理语法classMathUtil:staticmethoddefadd(a,b):returnabprint(MathUtil.add(1,2))特点不能访问实例属性、不能访问类属性纯工具、工具类通用场景数学计算、格式转换、通用工具函数4. property 属性装饰器最常用作用把方法伪装成属性调用不加括号封装私有变量控制读写做数据校验、逻辑计算基础用法只读classPerson:def__init__(self,age):self._ageagepropertydefage(self):# 可以加逻辑校验returnself._age pPerson(18)print(p.age)# 直接当属性用不用()可读可写 xxx.setterclassPerson:def__init__(self,age):self._ageagepropertydefage(self):returnself._ageage.setterdefage(self,value):if0value150:self._agevalueelse:raiseValueError(年龄非法)pPerson(20)p.age30# 赋值触发setterprint(p.age)场景字段封装、密码加密、数据校验、懒加载属性二、四大装饰器核心区别面试必背实例方法普通方法第一个参数self只能实例调用操作实例数据类方法 classmethodcls操作类全局数据静态方法 staticmethod无参数纯工具和类无关抽象方法 abstractmethod强制重写定接口属性方法 property方法变属性封装字段三、高频面试真题直接背答案1. classmethod 和 staticmethod 区别classmethod带cls能操作类变量侧重类业务staticmethod无默认参数只是挂靠类的普通函数侧重工具2. property 作用封装私有属性统一访问入口做参数校验简化调用隐藏内部逻辑。3. 抽象方法能不能有实现可以写实现但子类依旧必须重写子类可用super()调用父类逻辑。4. 抽象类可以有构造方法吗可以子类实例化会自动调用。5. 什么场景用抽象类多人协作定接口、框架底层规范、设计模式基类、统一业务行为。四、最简记忆口诀要强制规范→abstractmethod要操作整个类→classmethod要工具函数→staticmethod要隐藏字段、优雅取值→property需要我再给你出3道面试手写代码题当场练会吗

相关新闻