news 2026/9/2 15:33:04

Python类属性与魔术方法全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python类属性与魔术方法全解析

Python学习笔记-Day8

类属性方法

类属性就是类的对象属性,也就是类中的变量
类方法就是类里面的函数,而类里的函数就是方法

类的属性

#定义一个类,然后名字是ANimal,里面的object可写可不写,因为在python3中,class a():和class(object)完全一样,写object是为了python2/3的兼容性 class Animal(object): owner = 'youzi' def __init__(self,name): self.name = name #没有进行实例化的 print(Animal.owner)

类的方法

#可以让脚本自己在绝对路径下找到python的解释器 #!/usr/bin/env python3 #类的方法 class Animal(object): #定义一个变量 owner = '游子' #初始化函数 def __init__(self,name): #属性name self.name = name #可以让我们直接通过类调用,不需要实例,下面会再解释一下的 @classmethod #装饰器 #定义一个函数,也称为方法 #cls 代表类本身(Animal),这个时候我们如果想使用owner,就要cls.owner调用,在类中类变量和属性的调用方法都是一样的 def get_owner(cls): #这边就返回 return cls.owner @classmethod def set_owner(cls,name): cls.owner = name #不用实例化,直接调用 print(Animal.owner) #修改name的值 Animal.set_owner('youzi') #打印owner的值 print(Animal.owner)

静态方法与魔法方法

@staticmethod 静态方法 @classmethod 类方法
#!/usr/bin/env python3 # 类的方法 class Animal: owner = '游子' def __init__(self, name): self.name = name # 静态方法: # 既不需要实例self,也不需要类 @staticmethod def order_animal_found(): print('<UNK>') print('<UNK>') print('<UNK>') print('<UNK>') #不用实例化,直接调用 Animal.order_animal_found() #没有使用@staticmethod a = Animal('youzi') a.order_animal_found()

魔术方法

#从time导入sleep函数 from time import sleep #定义了一个Animal类 class Animal(object): #创建实例,并添加两个cls和name参数 def __new__(cls,name): print("__new__") #对Animal类中的cls进行实例化 return super(Animal,cls).__new__(cls) #初始化类 def __init__(self,name): print("__init__") self.name = name #定义了一个方法,是删除类的 def __del__(self): print("__del__") cat = Animal('tom') #这个代码的作用是,可以观察到对象从创建到销毁的完整过程 #防止程序结束太快,对象被立即回收看不到__del__ #当我们让程序睡眠5秒时,程序还是在执行的 sleep(10)

类的魔术方法解释

init方法:

  1. 在创建对象时自己调用
  2. 用于初始化对象的属性
  3. 第一个参数必须是self(指向对象本身)

new方法 : 真正创建对象的方法

  1. 在init之前调用
  2. 负责分配内存并返回对象
  3. 可以控制对象的创建过程

更多的魔术方法

类别方法描述触发方式
构造/析构__new__创建对象obj = Class()
__init__初始化对象obj = Class()
__del__销毁对象del obj或垃圾回收
字符串表示__str__用户友好字符串str(obj),print(obj)
__repr__官方字符串repr(obj), 交互式环境
__format__格式化输出format(obj, spec)
属性访问__getattr__访问不存在属性obj.undefined
__getattribute__访问任何属性obj.any_attribute
__setattr__设置属性obj.attr = value
__delattr__删除属性del obj.attr
__dir__列出属性dir(obj)
容器操作__len__获取长度len(obj)
__getitem__索引访问obj[key]
__setitem__设置值obj[key] = value
__delitem__删除项del obj[key]
__contains__成员测试item in obj
__iter__迭代for x in obj
__reversed__反向迭代reversed(obj)
数值运算__add__加法obj + other
__sub__减法obj - other
__mul__乘法obj * other
__truediv__除法obj / other
__eq__等于obj == other
__lt__小于obj < other
__gt__大于obj > other
上下文管理__enter__进入上下文with obj:
__exit__退出上下文with obj:结束
调用操作__call__使对象可调用obj()
描述符__get__描述符获取作为属性访问时
__set__描述符设置属性赋值时
__delete__描述符删除del obj.attr
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 20:18:41

vsftpd 安装、升级、配置全流程总结(含问题解决方案)

一、遇到的核心问题总结在离线环境中&#xff0c;主要遇到以下问题&#xff1a;安装路径非默认&#xff1a;源码编译后 vsftpd 默认安装到/usr/local/sbin/vsftpd&#xff08;而非/usr/sbin/&#xff09;&#xff0c;导致服务文件ExecStart路径不匹配&#xff0c;启动失败&…

作者头像 李华
网站建设 2026/9/1 6:39:47

HunyuanVideo-Foley部署:本地与云端GPU实战

HunyuanVideo-Foley部署&#xff1a;本地与云端GPU实战 在智能家居设备日益复杂的今天&#xff0c;确保无线连接的稳定性已成为一大设计挑战。蓝牙技术虽已发展至5.0版本&#xff0c;但实际应用中仍面临功耗、干扰和兼容性等问题。尤其在多设备共存的环境中&#xff0c;如何实现…

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

LangChain工具使用:简化AI函数调用

本章对应源代码&#xff1a;https://github.com/RealKai42/langchainjs-juejin/blob/main/lc-tools.ipynb 上一节中&#xff0c;我们学习了如何直接使用 openAI 的原生 API 去使用 function calling &#xff08;tools&#xff09;功能&#xff0c;需要自己维护历史、写参数类…

作者头像 李华
网站建设 2026/9/2 5:21:30

Docker 镜像打包为 tar 并在其他环境加载运行(离线部署实战指南)

Docker 镜像打包为 tar 并在其他环境加载运行&#xff08;离线部署实战指南&#xff09;适用场景&#xff1a;内网部署 / 无法访问 Docker Hub / 生产环境离线交付 阅读目标&#xff1a;掌握 Docker 镜像打包、传输、加载、运行的完整闭环一、为什么需要把 Docker 镜像打包成 t…

作者头像 李华
网站建设 2026/9/1 18:40:40

Docker 镜像体积优化实战:从 1GB 到 100MB

Docker 镜像体积优化实战&#xff1a;从 1GB 到 100MB适用人群&#xff1a;已经使用 Docker&#xff0c;有镜像体积焦虑的开发者 / 运维工程师 阅读目标&#xff1a;掌握 一套可复用的镜像瘦身方法论&#xff0c;而不是零散技巧一、为什么 Docker 镜像会变得这么大&#xff1f;…

作者头像 李华
网站建设 2026/9/1 20:30:32

LobeChat能否分配任务?团队协作智能调度

LobeChat能否分配任务&#xff1f;团队协作智能调度 在现代企业中&#xff0c;一个常见的场景是&#xff1a;产品经理在群里说“帮我把昨天会议里的三个需求整理成文档”&#xff0c;接着有人手动打开 Notion&#xff0c;翻找聊天记录&#xff0c;复制粘贴、重新组织语言——整…

作者头像 李华