一、为什么需要面向对象面向对象程序设计OOP的核心思想是把数据和操作数据的行为封装在一起用“对象”来模拟现实世界中的实体。Python 是一门支持多范式编程的语言但它的面向对象特性非常自然、灵活几乎一切皆对象。二、类与对象一切的起点在讲方法之前先明确类class和对象object的关系类是对一类事物的抽象描述对象是类的具体实例。class Dog: 一个最简单的类 def __init__(self, name, age): self.name name self.age age 创建对象实例化 d Dog(旺财, 3) print(d.name, d.age) # 旺财 3其中__init__是构造方法在创建对象时自动调用用于初始化属性。三、属性实例属性与类属性3.1 实例属性实例属性定义在__init__中通过self.xxx赋值每个对象各自独立。class Student: def __init__(self, name, score): self.name name # 实例属性 self.score score # 实例属性 s1 Student(小明, 90) s2 Student(小红, 85) s1.score 95 print(s1.score, s2.score) # 95 85互不影响3.2 类属性类属性定义在类体中、方法之外被所有实例共享适合存放常量或全局统计信息。class Student: school 第一中学 # 类属性 count 0 # 类属性用于统计实例数量 def __init__(self, name): self.name name Student.count 1 a Student(小明) b Student(小红) print(Student.school) # 第一中学 print(Student.count) # 2注意通过实例修改类属性只会创建同名实例属性不会影响类本身。修改类属性应使用类名.属性名。3.3 私有属性与 propertyPython 用下划线约定表示访问级别_name表示受保护__name表示私有名称改写。配合property可以实现受控的属性访问。class Account: def __init__(self, balance): self.__balance balance # 私有属性 property def balance(self): 只读属性 return self.__balance balance.setter def balance(self, value): if value lt; 0: raise ValueError(余额不能为负) self.__balance value acc Account(100) acc.balance 200 print(acc.balance) # 200 acc.balance -1 # 抛出 ValueError四、方法实例方法、类方法与静态方法4.1 实例方法最常见的类型第一个参数是self可以访问实例属性和类属性。class Circle: def __init__(self, r): self.r r def area(self): # 实例方法 return 3.14159 * self.r ** 2 c Circle(2) print(c.area()) # 12.566364.2 类方法用classmethod装饰第一个参数是cls常用于提供替代构造器。class Person: def __init__(self, name, age): self.name name self.age age classmethod def from_string(cls, info): 从 name-age 字符串创建对象 name, age info.split(-) return cls(name, int(age)) p Person.from_string(张三-20) print(p.name, p.age) # 张三 204.3 静态方法用staticmethod装饰既不需要self也不需要cls本质上是放在类命名空间里的普通函数。class MathUtil: staticmethod def is_even(n): return n % 2 0 print(MathUtil.is_even(10)) # True4.4 三种方法对比类型装饰器第一个参数典型用途实例方法无self操作实例数据类方法classmethodcls替代构造器、操作类状态静态方法staticmethod无工具函数、与实例无关的逻辑五、继承复用与扩展5.1 基本继承子类继承父类的属性和方法并可在此基础上扩展或重写。class Animal: def __init__(self, name): self.name name def speak(self): return …… class Cat(Animal): def speak(self): # 重写父类方法 return f{self.name}喵喵喵 class Dog(Animal): def speak(self): return f{self.name}汪汪汪 print(Cat(咪咪).speak()) # 咪咪喵喵喵 print(Dog(旺财).speak()) # 旺财汪汪汪5.2 使用 super() 调用父类子类重写__init__时通常需要调用super().__init__()完成父类初始化。class Animal: def __init__(self, name): self.name name class Bird(Animal): def init(self, name, can_fly): super().init(name) # 调用父类构造方法 self.can_fly can_fly b Bird(麻雀, True) print(b.name, b.can_fly) # 麻雀 True5.3 多重继承与 MROPython 支持多重继承方法查找顺序由 MRO方法解析顺序决定可用类名.__mro__查看。class A: def hello(self): return A class B(A): def hello(self): return B class C(A): def hello(self): return C class D(B, C): pass print(D().hello()) # B print([c.name for c in D.mro]) # [D, B, C, A, object]六、多态同一接口不同实现多态指不同类的对象对同一方法调用做出不同响应。Python 是动态类型语言天然支持“鸭子类型”只要对象有对应方法即可调用不要求继承关系。class Cat: def speak(self): return 喵 class Dog: def speak(self): return 汪 class Duck: def speak(self): return 嘎 def make_sound(animal): print(animal.speak()) for a in [Cat(), Dog(), Duck()]: make_sound(a) 喵 汪 嘎可以看到make_sound并不关心传入对象的具体类型只关心它是否有speak方法。这正是多态带来的灵活性。6.1 基于继承的多态class Shape: def area(self): raise NotImplementedError class Rectangle(Shape): def init(self, w, h): self.w, self.h w, h def area(self): return self.w * self.h class Circle(Shape): def init(self, r): self.r r def area(self): return 3.14159 * self.r ** 2 shapes [Rectangle(3, 4), Circle(2)] for s in shapes: print(f{type(s).name} 面积{s.area():.2f}) Rectangle 面积12.00 Circle 面积12.57七、综合实例一个简单的员工管理系统下面把方法、属性、继承与多态综合起来实现一个可运行的示例。class Employee: 员工基类 company 示例科技 # 类属性 def __init__(self, name, base_salary): self.name name # 实例属性 self.base_salary base_salary def salary(self): # 实例方法供子类重写 return self.base_salary def __str__(self): return f{self.name}{type(self).__name__}月薪{self.salary():.2f} class Engineer(Employee): def init(self, name, base_salary, bonus): super().init(name, base_salary) self.bonus bonus def salary(self): return self.base_salary self.bonus class Manager(Employee): def init(self, name, base_salary, team_size): super().init(name, base_salary) self.team_size team_size def salary(self): return self.base_salary self.team_size * 500 class Intern(Employee): classmethod def create(cls, name): 类方法作为替代构造器 return cls(name, 3000) staticmethod def is_valid_days(days): 静态方法校验实习天数 return 0 lt; days lt; 180 employees [ Engineer(张三, 15000, 3000), Manager(李四, 20000, 3), Intern.create(王五), ] total 0 for e in employees: print(e) # 多态调用各自的 salary() total e.salary() print(f公司{Employee.company}总人力成本{total:.2f}) print(实习天数合法, Intern.is_valid_days(90))运行结果张三Engineer月薪18000.00 李四Manager月薪21500.00 王五Intern月薪3000.00 公司示例科技总人力成本42500.00 实习天数合法 True八、常见误区与最佳实践不要滥用多重继承优先使用组合has-a代替继承is-a结构更清晰。类属性不要用可变对象如list、dict作为类属性会被所有实例共享容易踩坑。私有属性只是约定Python 没有真正的访问控制__x会被改名为_类名__x。优先使用鸭子类型不必为了多态强行设计继承体系接口一致即可。善用property在需要校验或计算属性时比直接暴露字段更安全。九、总结本文从类与对象出发依次讲解了实例属性与类属性、三种方法类型、单继承与多重继承、以及基于继承和鸭子类型的多态。掌握这些概念后就能用 Python 写出结构清晰、易于扩展的面向对象代码。建议读者把文中的综合实例动手敲一遍并尝试新增一个Sales类体会多态带来的扩展便利。
企业数字化 ERP 产品动态
相关推荐
博图卸载不干净问题解决办法,不重装系统的办法 1,今天自己卸载博图直接从控制面板里面卸载了,卸载后再安装就一直安装不上了,网上搜了很久都是提示要重新安装系统才可以,由于电脑上软件太多,重装系统是最最最后的选择,在尝试了很多多种办法后最终成功安装… · 2026/11/11 4:20:59
Notepad++实用快捷操作 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/11 8:20:31
C# WinForm窗体应用程序只能运行一个解决方案 internal static class Program{/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){bool ret;System.Threading.Mutex mutex new System.Threading.Mutex(true, Application.ProductName, out ret);if (ret){Application.Enable… · 2026/11/11 8:22:06
繁峙有电工证的师傅怎么复审延期?保姆级教程帮你搞定 繁峙有电工证的师傅怎么复审延期?保姆级教程帮你搞定 证书过期了不知道怎么复审延期?你不是一个人,这是很多【繁峙有电工证的师傅】最头疼的问题。别急,今天就来给你一个 保姆级教程 ,从复审流程到备考技巧,一网打尽,看完就能自己搞定。… · 2026/11/13 14:59:50
电工证审证需要什么官方报名入口在哪儿 电工证怎么考才不耽误工地进度 电工证审证需要什么官方报名入口在哪儿 电工证怎么考才不耽误工地进度 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。很多人手里有证,但因为没时间复习,导致审证流程卡在了“考试”这一步,耽误了工作。 电工证审证需要什么… · 2026/11/13 14:59:50
昌邑市电工证培训:学历不高怕报不上名?高含金量证书照样能拿! 昌邑市电工证培训:学历不高怕报不上名?高含金量证书照样能拿! 学历不高怕报不上名?别担心,昌邑市电工证培训正在火热进行中,不管是初中毕业还是高中毕业,只要你有意愿、有毅力,都能拿下这个 含金量… · 2026/11/13 14:59:50
惠来电工证哪里培训怎么考全国通用?实操考试心里没底怕挂科 惠来电工证哪里培训怎么考全国通用?实操考试心里没底怕挂科 实操考试心里没底怕挂科?你是三门峡中小施工企业负责人,正打算为员工办理惠来电工证,担心流程复杂、考试不过、证书不全国通用,还怕以后管理出问题?别急,这篇文章给你讲透彻,从报名到考试,… · 2026/11/13 14:59:50
中级电工证怎么样怎么报名学历不高也能考 中级电工证怎么样怎么报名学历不高也能考 你是不是也担心自己学历不高,连中级电工证都报不上名?其实不然,只要你符合基本条件,学历并不是拦路虎。中级电工证是很多电工从业者梦寐以求的证书,不仅能在岗位上获得更广阔的发展空间,还能提升个人竞争力。今… · 2026/11/13 14:59:50
电动车强电工证报考避坑指南:实操考试心里没底怕挂科?别慌! 电动车强电工证报考避坑指南:实操考试心里没底怕挂科?别慌! 你是不是也担心电动车强电工证实操考试挂科?怕操作不规范、流程记不清?别急,这波郑州报考避坑指南,专为你这种“怕考不过”的人准备。下面从报考条件、考试流程、避坑技巧、年审要点,再到考… · 2026/11/13 14:58:49
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/12 14:09:01
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43
维修电公用考电工证吗 在哪考最靠谱 维修电公用考电工证吗 在哪考最靠谱 工地太忙根本没时间复习考试,你是维修电工,天天在项目上跑,连抽个空背个题都难。那问题来了—— 维修电公用考电工证吗 ?答案是: 必须考 。尤其是在当前施工行业,没有电工证,连进场都可能被拦下。而且,… · 2026/11/13 0:00:08
电工证是不是可以登高?含金量和证书范围你必须知道的事 电工证是不是可以登高?含金量和证书范围你必须知道的事 证书过期了不知道怎么复审延期,这事儿很多人遇到过,尤其是像你这样在郑州金水区做劳务班组负责人,手里握着几十个工人的证书,稍微一疏忽,就可能影响工程进度和公司信誉。特别是电工证是不是可以登… · 2026/11/13 0:00:08
鸡西电工证哪家下证快官方报名入口怎么找 鸡西电工证哪家下证快官方报名入口怎么找 你是不是也担心 学历不高怕报不上名 ?别急,今天我就来跟你说说, 鸡西电工证哪家下证快 ,还有 官方报名入口 到底怎么找,别让那些“代办”“代考”耽误了你的机会。… · 2026/11/13 0:00:08
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 21:15:21