面向对象的三大特性

1概念

封装属性和方法书写到类的里面的操作即为封装,封装可以为属性和方法添加私有权限
继承子类默认继承父类的所有属性和方法,与此同时子类也可以重写父类属性和方法。
多态多态是同一类事物具有的多种形态。不同的对象调用同一个接口(方法),表现出不同的状态,称为多态。

2 Python中的封装

2.1私有属性和私有方法

1. 在Python中,可以为属性和方法设置私有权限。设置私有属性和方法的方式:在属性或方法名前面加上 __(双下划线)

2. 私有属性和方法使用规则:

  • 只能在类的内部使用,不能在类的外部使用

  • 如果想在类的外部使用,需要通过公共接口

3. 获取与设置私有属性值

在Python中,一般定义函数名 get_xx 用来获取私有属性,定义 set_xx 用来修改私有属性值。

4. 封装的意义

        4.1 私有属性的意义:明确的区分内外,控制外部对隐藏的属性的操作行为,防止外部随意修改内部重要数据。

        4.2 私有方法的意义:简化调用代码,降低程序复杂度,将复杂的内部逻辑隐藏起来,对外只提供一个简单的方法。

3 Python中的继承

3.1概念

简单来说,如果一个类B使用了另一个类A的成员(属性和方法),我们就可以说B类继承了A类,这也体现了OOP中代码重用的特性!  --------   在Python中,所有类默认继承object类,object类是顶级类或基类;其他子类叫做派生类。

3.2 继承的基本语法

# 父类A
class A(object):
    pass

# 子类B
class B(A):
    pass

1. 单继承

一个类只能继承自一个其他的类,不能继承多个类。这个类会具有父类的属性和方法。

例子:

# 父类A
class A(object):
    pass

# 子类B
class B(A):
    pass

2. 重写父类属性和方法

重写也叫作覆盖,就是当子类成员与父类成员名字相同的时候,从父类继承下来的成员会重新定义。此时,通过子类实例化出来的对象访问相关成员的时候,真正起作用的是子类中定义的成员

2-1 super():调用父类属性或方法

Python 中调用父类构造方法有两种正确写法:
# 写法一:使用父类名(需要手动传 self)
Animal.__init__(self, name)  # ✅ 第一个参数必须是 self

# 写法二:使用 super()(推荐,自动处理 self)
super().__init__(name)  # ✅ 更简洁,而且支持多继承

3.多继承

一个类同时继承了多个父类,并且同时具有所有父类的属性和方法。例如:孩子会继承父亲和母亲的方法。

例子:

class Father(object):
    pass

class Mother(object):
    pass

class Child(Father, Mother):  # 多继承
    pass

可以通过类名.__mro__类名.mro()获得"类的层次结构",方法解析顺序也是按照这个结构查找的。

4Python中的多态

4.1概念

多态指的是一类事物有多种形态。

标准定义:多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果。

Python中的多态就是指 → 同一个函数,随着传入子类对象的不同,可以实现不同的功能!

1.多态的实现步骤

1-1 有继承:定义父类、定义子类,子类继承父类

1-2 函数重写:子类重写父类的函数

1-3 父类引用指向子类对象:子类对象传给父类引用

2.多态的好处

        在不改变框架代码的情况下,通过多态语法轻松实现模块和模块之间的解耦合,实现软件系统的可扩展

5 面向对象的其他特性

5.1实例属性(对象属性)

属性是类或对象中的属性,都属于属性。

要点说明
定义位置__init__ 方法里,用 self.属性名 定义
归属属于每个对象(实例),不同对象各有一份
访问方式只能通过对象访问:对象.属性名
作用存储每个对象独有的数据

5.2 类属性

指的就是类所拥有的属性,它被共享于整个类中(即所有实例都可以直接调用)。

访问方式:

  • 对象名.类属性名

  • 类名.类属性名 → 推荐使用

5.3 类方法

类方法就是针对类定义的方法,在类方法中可以直接访问类属性或者调用其他类方法

基本语法:

  • 类方法需要用修饰器 @classmethod 来标识

  • 类方法的第一个参数应该是 cls

  • 有哪一个类调用的方法,方法内的cls就是哪一个类的引用

  • 这个参数和实例方法的第一个参数self类似

  • 通过类名.调用类方法,调用时不需要传递cls参数

  • 在方法内部:通过cls.访问类属性,通过cls.调用其他类方法

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐