当前位置:首页>python>10分钟掌握 2026版 Python 之 类和对象

10分钟掌握 2026版 Python 之 类和对象

  • 2026-09-09 05:49:01
10分钟掌握 2026版 Python 之 类和对象

概述

让代码更有 “结构感”!从类和对象的定义,到封装、继承、多态,再到 Python 的动态特性,带你一步步走进面向对象编程的世界,让代码逻辑更清晰、复用性更强。

一、类和对象

(一)类和对象的定义

1. 类的语法

class 类名:

属性

属性名 = 初始值

方法(self 为必填参数,代表当前对象)

def 方法名 (self, 参数列表):

方法体

2. 实例化对象

class Person:

name = None

age = None

def say (self):

print (f"姓名:{self.name},年龄:{self.age}")

3.类的成员方法

知识点:

  1. 类的定义与类属性:通过class关键字定义类,类内部可定义类属性作为对象的初始公共属性。

  2. 成员方法的定义:类的成员方法第一个参数必须是self,用于指代当前对象本身。

  3. self 的核心作用:通过self可以在成员方法中访问和调用当前对象的属性(如self.name)。

  4. 带参成员方法:成员方法可在self后定义额外参数,实现向方法传递外部数据。

  5. 对象的创建与初始化:通过类名()创建对象实例,再通过对象.属性的方式为对象赋值。

  6. 成员方法的调用:创建对象后,通过对象.方法名()调用无参方法,对象.方法名(参数)调用带参方法。

  7. 对象的独立性:不同对象的属性相互独立,调用同一方法会输出各自的属性数据。

(二)构造方法(init)

用于初始化对象属性,创建对象时自动调用。

知识点:

  1. 构造方法的定义:Python 中类的构造方法是__init__,在创建对象时会自动调用,用于对象的初始化。

  2. 无参构造方法:可定义无参的__init__方法,仅执行初始化逻辑,不接收外部参数。

  3. 有参构造方法:__init__方法可在self后定义参数,实现创建对象时直接传入属性值。

  4. 构造方法赋值逻辑:通过self.属性名 = 参数,将构造方法接收的参数赋值给对象的实例属性。

  5. 对象创建的简化:使用有参构造方法时,创建对象可直接通过类名(参数)完成,无需后续手动为属性赋值。

  6. 构造方法的优先级:定义有参构造后,创建对象必须传入对应参数,否则会触发参数不匹配的异常。

(三)魔法方法

1. str:定义对象的字符串表示

2. eq:定义对象的相等判断

知识点:

  1. 魔法方法的定义:Python 中以双下划线__开头和结尾的特殊方法(如__init__、__str__、__eq__)被称为魔法方法,用于实现特定的内置行为。

  2. __init__构造方法:在创建对象时自动调用,用于初始化对象的属性,可接收参数为对象属性赋值。

  3. __str__字符串表示方法:当使用print()打印对象或str()转换对象时,会自动调用该方法,返回自定义的字符串描述,提升对象可读性。

  4. __eq__相等判断方法:当使用==运算符比较两个对象时,会自动调用该方法,可自定义对象相等的判断逻辑(如示例中按年龄判断)。

  5. 魔法方法的自动触发:魔法方法无需手动调用,在执行对应操作(如打印、比较)时会被自动触发,实现了 Python 的内置操作与自定义类的无缝衔接。

作业

重写lt(小于)和ge(大于等于)方法,实现通过 age 属性比较对象大小。

(四)封装(私有属性和方法)

私有成员以双下划线(__)开头,外部无法直接访问,需通过类内方法操作。

知识点:

  1. 封装与隐藏的实现:通过在属性或方法名前添加双下划线__,可以将其定义为私有成员,实现对类内部细节的隐藏。

  2. 私有属性的定义:以__开头的属性(如__score)为私有属性,外部无法直接访问,只能在类内部通过成员方法操作。

  3. 私有方法的定义:以__开头的方法(如__check_score)为私有方法,外部无法直接调用,仅能在类内部被其他成员方法调用。

  4. 封装的作用:

    保护内部数据,防止外部随意修改,保证数据的安全性和一致性。

    隐藏内部实现细节,仅对外暴露必要的接口,降低使用复杂度。

  5. 访问控制的限制:在类外部直接访问私有属性或调用私有方法会触发错误,必须通过类提供的公共方法(如say())进行间接操作。

  6. 内部逻辑的封装:私有方法可用于封装类的内部校验或处理逻辑(如成绩检查),使公共方法更简洁,同时保证内部逻辑的独立性。

(五)继承

1. 单继承

2. 多继承

3. 方法重写

知识点:

  1. 类的继承语法:Python 支持多继承,子类定义时通过class 子类名(父类1, 父类2)的形式继承多个父类的属性和方法。

  2. 属性的继承与重写:子类会继承所有父类的属性,同时可在子类中重新定义同名属性(如price = 9),覆盖父类的属性值。

  3. 方法的继承:子类可直接调用父类未被重写的方法(如say_taste()),无需重新定义即可使用父类功能。

  4. 方法重写:子类可定义与父类同名的方法(如say_price()),覆盖父类原有方法的逻辑,实现自定义功能。

  5. 父类属性 / 方法调用:

    可通过父类名.属性直接访问父类的原始属性值,不受子类重写影响;

    可通过父类名.方法(self)或super().方法()调用父类的方法,执行父类原有逻辑。

  6. super () 函数的作用:super()可获取父类对象,用于调用父类的属性和方法,无需显式指定父类名,适配多继承场景。

  7. 子类自有属性与方法:子类可定义独有的属性(如color)和方法(如say_color()),扩展父类的功能。

  8. 魔法方法重写:子类可重写__str__等魔法方法,自定义对象的字符串表示形式。

  9. 属性的赋值与修改:创建子类对象后,可通过对象.属性的方式为继承的属性、子类自有属性赋值,也可修改属性值。

  10. 多继承的属性查找:子类对象访问属性时,优先使用子类自身定义的属性,无则按继承顺序查找父类属性。

总结

  1. Python 支持多继承,子类可继承多个父类的属性和方法,也可自定义自有属性 / 方法扩展功能。

  2. 子类可重写父类的属性和方法,同时能通过父类名.xxx或super()调用父类原始的属性和方法。

  3. super()是调用父类成员的便捷方式,无需硬编码父类名,适配多继承场景。

(六)多态

不同对象执行同一方法表现不同行为。

  1. 多态的核心概念:不同对象在执行同一个方法时,会表现出不同的行为,这是面向对象编程的重要特性。

  2. 多态的实现基础:多态依赖于继承和方法重写。子类继承自同一个父类,并重写了父类的同名方法。

  3. 抽象父类的作用:定义一个抽象的父类(如Animal),其中声明一个统一的接口方法(如say),但不提供具体实现。

  4. 子类的方法重写:各个子类(如Dog、Cat)继承自父类,并根据自身特性重写say方法,实现各自的行为。

  5. 统一的调用接口:定义一个统一的函数(如say_something),它接收一个父类类型的参数。在函数内部,调用该参数的统一方法(如animal.say())。

  6. 运行时的动态绑定:当向统一函数传入不同的子类对象时,Python 会在运行时自动识别对象的真实类型,并调用对应子类中重写的方法,从而实现不同的行为。

(七)Python 的动态性

可动态为类 / 对象添加属性和方法。

1. 类动态添加属性和方法

知识点:

  1. Python 的动态性:Python 是动态语言,允许在程序运行过程中,为类或对象动态地添加新的属性和方法。

  2. 类级别的动态添加:

    可以直接通过类名.属性名 = 值的方式,为类添加新的类属性,所有该类的实例对象都将继承这个新属性。

    可以通过类名.方法名 = 函数名的方式,为类添加新的方法,所有该类的实例对象都可以调用这个新方法。

  3. 动态添加的方法要求:为类动态添加的方法,其定义时第一个参数必须是self,以保证它能像类内定义的方法一样,正确接收并操作当前对象实例。

  4. 对象的继承与独立:

    类动态添加的属性和方法,会被所有该类的实例对象继承。

    每个对象实例可以独立地修改继承来的属性值,而不会影响其他对象或类本身的属性。

  5. 动态方法的调用:动态添加到类的方法,在被对象调用时,self会自动绑定到当前调用的对象实例上,从而可以访问该对象的所有属性。

2. 对象动态添加属性和方法

知识点:

  1. 对象级别的动态添加:Python 允许在运行时,为单个对象实例动态添加新的属性和方法,这些新增成员仅属于该对象,不会影响类或其他实例。

  2. 动态添加属性:通过对象.属性名 = 值的方式,直接为对象添加新属性,其他同类型对象不会继承此属性。

  3. 动态添加方法:通过对象.方法名 = 函数名的方式,为对象添加新方法,其他同类型对象不会拥有此方法。

  4. 访问限制:尝试访问其他对象未添加的属性或方法时,会触发属性不存在的错误。

  5. 与类级别动态添加的区别

    对象级别的动态添加仅作用于单个实例,具有隔离性。

    类级别的动态添加会影响所有该类的实例,具有全局性。

二、枚举类

(一)定义枚举类

用于定义有限固定的实例,不可修改和继承。

方式 1:直接使用 enum.Enum 创建

  1. 枚举类的定义:Python 中通过enum模块定义枚举类,用于表示一组有限、固定且不可修改的实例,避免使用魔法值。

  2. 基础创建方式:可直接使用enum.Enum函数创建枚举类,第一个参数为类名,第二个参数为元组,用于列出所有枚举值。

  3. 枚举成员的属性:每个枚举成员都自带和两个属性:

    name:枚举成员的变量名(如SPRING)。

    value:枚举成员的序号,默认从 1 开始递增。

  4. 枚举成员的访问方式:

    通过点号访问:Season.SPRING。

    通过键名访问:Season['WINTER']。

    通过序号访问:Season(3)。

  5. 遍历所有枚举成员:通过枚举类的__members__属性(返回字典),可以遍历并获取所有枚举实例及其name和value。

  6. 不可变性:枚举类定义后,其成员不可被修改,也不能被继承,保证了代码的安全性和可维护性。

方式 2:继承 enum.Enum 派生枚举类

  1. 继承式枚举定义:通过继承enum.Enum类来定义枚举,这是更常用、更灵活的方式,支持自定义成员值和方法。

  2. 自定义成员值:在继承式枚举中,可以为每个成员显式赋值(如字符串、数字等),value属性将直接返回这个自定义值,而非默认序号。

  3. 枚举成员的属性:每个成员依然拥有name(成员变量名)和value(自定义值)两个核心属性。

  4. 成员访问方式:

    点号访问:Week.MON

    键名访问:Week['SAT']

    值访问:Week('星期日')

  5. 自定义枚举方法:可以在枚举类内部定义成员方法(如info()),供每个枚举实例调用。

  6. 遍历所有成员:通过__members__属性(返回字典),可以遍历并获取所有枚举实例及其name和value。

  7. 不可变性:枚举类定义后,其成员不可修改,也不能被继承,保证了代码的安全性和可维护性。

结束语

1

后续我会持续输出优质、实用的内容,也欢迎大家在评论区留言,说说你们最想学习的内容、遇到的困惑,我们一起交流、一起进步。

愿每一位软件人,都能在这里收获知识、突破自我,在自己的赛道上发光发热✨

最新文章

随机文章