news 2026/6/20 8:51:08

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 四大常用装饰器最全对比

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

@abstractmethod/@classmethod/@staticmethod/@property
定义、用法、参数、场景、区别、面试题一次性吃透

一、总览对照表

装饰器传参第一个访问对象访问类能否实例调用核心用途
@abstractmethod不能直接实例定义抽象接口,强制子类重写
@classmethodcls不能类/实例都可操作类属性,工厂方法
@staticmethod不能不能类/实例都可纯工具函数,和类无关
@propertyself不能实例调用把方法变成属性,只读/封装

1. @abstractmethod 抽象方法

所属模块:from abc import ABC, abstractmethod

作用

  1. 定义接口规范,只声明不实现
  2. 强制子类必须重写,否则无法实例化
  3. 抽象类不能直接创建对象

语法

fromabcimportABC,abstractmethodclassAnimal(ABC):@abstractmethoddefcry(self):pass

特点

  • 无默认第一个参数
  • 不能实例化基类
  • 用来做设计模式基类(工厂、策略、模板)

场景

统一接口、插件规范、开闭原则


2. @classmethod 类方法

作用

  1. 绑定,不绑定实例
  2. 第一个参数固定:cls(代表当前类)
  3. 可以修改类变量

语法

classUser:count=0@classmethoddefadd_user(cls):cls.count+=1print("当前人数",cls.count)# 类直接调用User.add_user()# 实例也能调用u=User()u.add_user()

特点

  • 只能访问类属性/类方法
  • 不能访问实例属性self.xxx

常用场景

工厂方法、批量创建对象、类全局统计


3. @staticmethod 静态方法

作用

  1. 和类、实例都无关,就是一个普通函数
  2. 不需要默认参数(无 self / 无 cls)
  3. 只是挂在类里方便管理

语法

classMathUtil:@staticmethoddefadd(a,b):returna+bprint(MathUtil.add(1,2))

特点

  • 不能访问实例属性、不能访问类属性
  • 纯工具、工具类通用

场景

数学计算、格式转换、通用工具函数


4. @property 属性装饰器(最常用)

作用

  1. 把方法伪装成属性调用,不加括号
  2. 封装私有变量,控制读写
  3. 做数据校验、逻辑计算

基础用法(只读)

classPerson:def__init__(self,age):self._age=age@propertydefage(self):# 可以加逻辑校验returnself._age p=Person(18)print(p.age)# 直接当属性用,不用()

可读可写 @xxx.setter

classPerson:def__init__(self,age):self._age=age@propertydefage(self):returnself._age@age.setterdefage(self,value):if0<value<150:self._age=valueelse:raiseValueError("年龄非法")p=Person(20)p.age=30# 赋值触发setterprint(p.age)

场景

字段封装、密码加密、数据校验、懒加载属性


二、四大装饰器核心区别(面试必背)

  1. 实例方法(普通方法):第一个参数self,只能实例调用,操作实例数据
  2. 类方法 @classmethodcls,操作类全局数据
  3. 静态方法 @staticmethod:无参数,纯工具,和类无关
  4. 抽象方法 @abstractmethod:强制重写,定接口
  5. 属性方法 @property:方法变属性,封装字段

三、高频面试真题(直接背答案)

1. classmethod 和 staticmethod 区别

  • classmethodcls,能操作类变量,侧重类业务
  • staticmethod无默认参数,只是挂靠类的普通函数,侧重工具

2. property 作用

封装私有属性,统一访问入口,做参数校验,简化调用,隐藏内部逻辑。

3. 抽象方法能不能有实现?

可以写实现,但子类依旧必须重写,子类可用super()调用父类逻辑。

4. 抽象类可以有构造方法吗?

可以,子类实例化会自动调用。

5. 什么场景用抽象类?

多人协作定接口、框架底层规范、设计模式基类、统一业务行为。


四、最简记忆口诀

  • 强制规范@abstractmethod
  • 操作整个类@classmethod
  • 工具函数@staticmethod
  • 隐藏字段、优雅取值@property

需要我再给你出3道面试手写代码题当场练会吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 16:12:05

Python开发者快速接入Taotoken大模型API的完整指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Python开发者快速接入Taotoken大模型API的完整指南 对于Python开发者而言&#xff0c;接入不同的大模型API往往意味着需要学习各家…

作者头像 李华
网站建设 2026/5/20 16:11:40

基于嵌入式核心板的储能监控系统开发:硬件选型、架构设计与实战

1. 项目概述&#xff1a;为什么储能监控是“双碳”落地的关键一环这几年&#xff0c;无论是做工业自动化、能源管理还是嵌入式开发的朋友&#xff0c;应该都频繁听到“双碳”这个词。目标很宏大&#xff0c;路径却很具体&#xff0c;其中电力系统的清洁化、智能化转型是绝对的核…

作者头像 李华
网站建设 2026/5/20 16:11:02

光伏并网实战:如何用Simulink仿真优化LCL逆变器的准PR控制参数?

光伏并网系统LCL逆变器的准PR控制参数优化实战指南 在可再生能源并网领域&#xff0c;LCL型三相并网逆变器因其优异的谐波抑制能力而成为主流选择。然而&#xff0c;工程师在实际应用中常面临并网电流质量不佳、系统稳定性不足等挑战。本文将深入解析准PR控制器的核心机理&…

作者头像 李华
网站建设 2026/5/20 16:07:38

3步掌握Il2CppDumper:Unity游戏逆向分析的终极指南

3步掌握Il2CppDumper&#xff1a;Unity游戏逆向分析的终极指南 【免费下载链接】Il2CppDumper Unity il2cpp reverse engineer 项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper Unity游戏逆向分析是许多开发者和安全研究人员面临的挑战&#xff0c;尤其是当游…

作者头像 李华
网站建设 2026/5/20 16:07:28

Excel怎么转PDF?2026官方转换方法+工具盘点

在日常办公中&#xff0c;Excel表格转换为PDF格式是很常见的需求。PDF格式具有跨平台兼容性强、排版稳定、便于分享和打印等优势&#xff0c;使其成为文档传递的理想选择。本文将详细介绍Excel转PDF的多种官方方法&#xff0c;并为不同场景的用户提供全面的转换方案。 Excel转…

作者头像 李华