python中类的常用知识
目录1.基本结构与__init__2.继承与super()3.property装饰器4.常用的魔法方法5.classmethod与staticmethod6.__slots__节省内存7.私有属性8.__call__让实例可调用9.组合优于继承1.基本结构与__init__class Dog: # 类属性所有实例共享 species Canis familiaris def __init__(self, name, age): # 实例属性每个实例独有 self.name name self.age age def bark(self): return f{self.name} says woof!类属性 vs 实例属性——类属性被所有实例共享实例属性各自独立。2.继承与super()class Animal: def __init__(self, name): self.name name def speak(self): return ... class Cat(Animal): def __init__(self, name, color): super().__init__(name) # 调用父类 __init__ self.color color def speak(self): # 重写父类方法 return f{self.name} says meowsuper()使用的场景class Child(Parent): def method(self): super().method() # 扩展父类行为而非完全覆盖 # 额外的子类逻辑...3.property装饰器将方法伪装成属性实现 getter/setter 的优雅写法class Circle: def __init__(self, radius): self._radius radius property def radius(self): # getter return self._radius radius.setter def radius(self, value): # setter if value 0: raise ValueError(半径不能为负) self._radius value property def area(self): # 只读计算属性 return 3.14159 * self._radius ** 2 # 使用 c Circle(5) print(c.area) # 78.53975 —— 像属性一样访问 c.radius 10 # 触发 setter 校验4.常用的魔法方法__str__和__repr__class Point: def __init__(self, x, y): self.x x self.y y def __str__(self): # 给用户看的print()调用 return fPoint({self.x}, {self.y}) def __repr__(self): # 给开发者看的调试用 return fPoint(x{self.x}, y{self.y}) print(p) # Point(1, 2) ← 漂亮好读__eq__、__lt__、__len__、__getitem__这些魔术方法的作用是让你自己的对象也能用 Python 的内置操作符和函数比如、、len()、[]等class Book: def __init__(self, title, pages): self.title title self.pages pages self.content [第1页内容, 第2页内容, 第3页内容] def __eq__(self, other): # 比较 return self.pages other.pages def __lt__(self, other): # 比较排序用 return self.pages other.pages def __len__(self): # len() 调用 return self.pages def __getitem__(self, index): # obj[index] 支持索引 return self.content[index] b1 Book(A, 100) b2 Book(B, 100) print(b1 b2) # True ← 因为页数都是 100 print(len(b1)) # 100 ← 你写 len(b)Python 自动调 b.__len__() print(b[0]) # 第1页内容 ← 你写 b[0]Python 自动调 b.__getitem__(0) print(b[1]) # 第2页内容5.classmethod与staticmethodclass Date: def __init__(self, year, month, day): # ① 实例方法操作具体对象 self.year year self.month month self.day day classmethod def from_string(cls, date_str): # ② 类方法用类来造对象工厂 year, month, day date_str.split(-) return cls(int(year), int(month), int(day)) staticmethod def is_valid_date(year, month, day): # ③ 静态方法纯工具函数 return 1 month 12 and 1 day 31 # ① 普通创建 d1 Date(2024, 1, 1) # ② 类方法换种方式创建传字符串 d2 Date.from_string(2024-1-1) # ③ 静态方法只是个工具不用创建对象就能调用 print(Date.is_valid_date(2024, 13, 1)) # False6.__slots__节省内存class Point: __slots__ (x, y) # 禁止动态添加属性省内存 def __init__(self, x, y): self.x x self.y y在 Python 里每个普通对象内部都藏着一个小字典叫__dict__专门用来存它的属性。class Point: def __init__(self, x, y): self.x x self.y y p Point(1, 2) print(p.__dict__) # 输出{x: 1, y: 2}不加__slots__的代价1.费内存字典为了随时能加新东西会预留很多空间。2.可以随意乱加属性p Point(1, 2) p.z 999 # 完全没报错随便加了个 z print(p.z) # 999适用场景创建大量实例时(百万级)显著减少内存占用。7.私有属性class BankAccount: def __init__(self): self._protected 42 # 约定内部使用但可以访问 self.__private 100 # 名称改写变成 _BankAccount__private #方法也一样 def __secret_method(self): # 同样被改写_BankAccount__secret_method pass #单下划线 acc BankAccount() print(acc._protected) # 42 ← 完全可以访问Python 不拦你 acc._protected 999 # 也能改一样不拦 #双下划线 # print(acc.__private) # ❌ 报错AttributeError找不到 print(acc._BankAccount__private) # ✅ 100 ← 用改写后的真名才能访问 class Father: def __init__(self): self.__money 100 # 实际存成 _Father__money class Son(Father): def __init__(self): super().__init__() self.__money 5 # 实际存成 _Son__money名字不一样Python 会偷偷帮你改名字这就是图里说的名称改写机制 / name mangling。你写的是__privatePython 在背后把它改成了_BankAccount__private规则就是_类名__变量名8.__call__让实例可调用class Counter: def __init__(self): self.count 0 def __call__(self): self.count 1 return self.count c Counter() print(c()) # 1 print(c()) # 29.组合优于继承组合优于继承的意思是想给一个类加功能时优先把那个功能做成独立的类然后让它拥有一个组合而不是硬去继承一堆父类。这样关系更清晰、更灵活、复用性更强还能避开多继承的菱形混乱。# ✅ 组合的正确写法 # 1. 把飞行这个功能独立成一个类 class Wings: def fly(self): print(拍打翅膀飞起来了) # 2. 狗拥有翅膀has-a而不是是鸟is-a class Dog: def __init__(self): self.wings Wings() # 组合狗有一对翅膀 def bark(self): print(汪汪汪) def fly(self): self.wings.fly() # 飞的时候交给翅膀去做 # 3. 猫也想飞给它也装一对就行复用超方便 class Cat: def __init__(self): self.wings Wings() def fly(self): self.wings.fly() d Dog() d.bark() # 汪汪汪 d.fly() # 拍打翅膀飞起来了 ← 狗获得了飞行能力但它依然是狗不是鸟 c Cat() c.fly() # 拍打翅膀飞起来了 ← 同一个 Wings 类猫也能用

相关新闻

大模型API网关设计终极方案:支持动态路由、流式熔断与Token级计费(仅限内部技术委员会解密版)

大模型API网关设计终极方案:支持动态路由、流式熔断与Token级计费(仅限内部技术委员会解密版)

更多请点击: https://intelliparadigm.com 第一章:大模型API网关设计终极方案:支持动态路由、流式熔断与Token级计费(仅限内部技术委员会解密版) 现代大模型服务集群面临高并发、多租户、细粒度计费与实时服务质量保障…

2026/7/23 9:32:49 阅读更多 →
如何用Kronos金融大模型实现89%准确率的股票预测

如何用Kronos金融大模型实现89%准确率的股票预测

如何用Kronos金融大模型实现89%准确率的股票预测 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 你是否曾为股票市场的复杂波动感到困惑?是否曾…

2026/7/21 15:27:52 阅读更多 →
如何快速捕获网页视频音频?猫抓插件终极指南帮你三步搞定

如何快速捕获网页视频音频?猫抓插件终极指南帮你三步搞定

如何快速捕获网页视频音频?猫抓插件终极指南帮你三步搞定 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch&a…

2026/7/22 17:30:28 阅读更多 →

最新新闻

TPS65094x开关电源PCB布局实战:从寄生参数到EMI优化的设计精要

TPS65094x开关电源PCB布局实战:从寄生参数到EMI优化的设计精要

1. 项目概述:为什么开关电源的PCB布局是“玄学”也是“科学”干了这么多年硬件设计,尤其是电源这一块,我越来越觉得PCB布局是门“手艺活”。你说它是玄学吧,它背后全是电磁场、寄生参数、环路稳定性的硬核物理;你说它是…

2026/7/23 14:06:47 阅读更多 →
千笔AI与云笔AI论文写作工具对比评测

千笔AI与云笔AI论文写作工具对比评测

1. 论文写作工具对比:千笔AI与云笔AI深度评测 作为一名经历过自考论文写作的过来人,我深知选题、查资料、写初稿这些环节有多折磨人。去年帮学弟学妹们测试了市面上十几款AI论文工具,最终筛选出千笔AI和云笔AI这两款表现突出的选手。今天就从…

2026/7/23 14:06:47 阅读更多 →
程序员开会整理:2026年3款链接提取视频工具,帮你快速提取内容

程序员开会整理:2026年3款链接提取视频工具,帮你快速提取内容

针对学术研究人员通过链接提取视频内容、批量处理访谈/讲座录音的需求,2026年实测的三款主流工具可按需求选择:仅需要基础转写的多语种学术内容可选择tl;dv,需要先剪辑音频再转写的选Podcastle,需要提取访谈核心论点、生成结构化研…

2026/7/23 14:06:47 阅读更多 →
论文答辩备考梳理核心考点:2026 B站学习视频总结实用指南

论文答辩备考梳理核心考点:2026 B站学习视频总结实用指南

先说明白核心判断 针对2026年论文答辩备考,用AI工具整理B站学习视频的核心考点,本质是通过语音转写AI提炼帮你省掉手动记笔记的时间,不需要追求功能最多的工具,你只需要根据自己的使用频率、是否需要协作、预算三个维度选择&…

2026/7/23 14:06:47 阅读更多 →
基于TI LMP91050的MSP430硬件抽象层驱动开发与移植指南

基于TI LMP91050的MSP430硬件抽象层驱动开发与移植指南

1. 项目概述与核心价值在嵌入式传感器开发领域,尤其是涉及热电堆、气体检测这类需要高精度模拟信号调理的场景,工程师常常面临一个经典难题:如何让微控制器(MCU)高效、稳定地与复杂的模拟前端(AFE&#xff…

2026/7/23 14:06:47 阅读更多 →
克劳德·法布尔构造雅可比猜想反例:数学基础理论的重要突破

克劳德·法布尔构造雅可比猜想反例:数学基础理论的重要突破

克劳德法布尔给出雅可比猜想的一个反例:数学史上的重要突破在数学研究领域,每一个猜想的证明或反例的提出都可能引发学科的革命性进展。近期,克劳德法布尔(Claude Fabre)关于雅可比猜想(Jacobian Conjectur…

2026/7/23 14:05:46 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻