python面向对象

一、面向对象基本概念

什么是面向对象?

面向对象编程就像 "搭乐高":

  • 每个积木块都是独立的小机器人(对象),有自己的技能(方法)和工具包(属性)
  • 积木之间通过标准接口互相连接,无需知道对方内部运作
  • 可以用 "模具"(类)批量生产相似机器人,还能给模具加新功能(继承)
  • 同一个指令能触发不同反应(多态)

核心思想:对象是类的实例,类是对象的模板

类的定义与实例化

python

运行

复制代码
# 类的定义
class Car():
    pass

# 类的实例化
obj = Car()  # 创建对象

类的基本结构包含成员属性和成员方法:

python

运行

复制代码
class Car():
    # 成员属性
    color = "咖啡色"
    
    # 成员方法
    def run(self):
        print("fast")

类的命名规范

推荐使用驼峰命名法,如:MyCarStudentInfo

二、成员访问控制

Python 中成员分为两个保护等级:

  1. 公有成员(public):类内外均可访问
  2. 私有成员(private) :仅类内部可访问(命名时前面加两个下划线__

对象的相关操作

python

运行

复制代码
class MyCar():
    # 公有成员属性
    color = "咖啡色"
    # 私有成员属性
    __logo = "特斯拉"
    
    # 公有成员方法
    def run(self):
        print("我的小车跑起来很快", self.color)
    
    # 私有成员方法
    def __info(self):
        print("我的价格保密,类外不能调用")

# 实例化对象
obj = MyCar()

# 访问公有成员
print(obj.color)
obj.run()

# 动态添加属性和方法
obj.luntai = "米其林"  # 添加属性

def dahuangfeng():
    print("请叫我大黄蜂,我的车会变形")
obj.dahuangfeng = dahuangfeng  # 添加方法

# 删除成员
del obj.luntai

类的相关操作

python

运行

复制代码
# 访问类的公有成员
print(MyCar.color)
MyCar.run(MyCar())

# 动态添加类成员
MyCar.logo = "宝马"  # 添加类属性

def fangxiangpan():
    print("制造方向盘的方法")
MyCar.fangxiangpan = fangxiangpan  # 添加类方法

# 删除类成员
del MyCar.logo

私有成员的访问方式

python

运行

复制代码
class Plane():
    # 私有成员属性
    __airsistant = 2
    
    # 私有方法
    def __plane_info(self):
        print("飞机上的空姐数量是保密的", self.__airsistant)
    
    # 公有方法访问私有成员(推荐)
    def pub_info(self):
        print(self.__airsistant)
        self.__plane_info()

三、面向对象三大特征

1. 封装

对类中成员属性和方法的保护,控制外界访问权限,通过公有方法访问私有成员,实现数据安全。

2. 继承

一个类获取另一个类的属性和方法,分为单继承和多继承。

python

运行

复制代码
# 单继承
class Human():
    hair = "黄色的"
    def eat(self):
        print("人类天生就会吃")

class Man(Human):
    pass  # 继承Human类的所有公有成员

# 多继承
class Father():
    property = "抽烟喝酒"

class Mother():
    property = "化妆品包包"

class Son(Father, Mother):
    pass  # 同时继承Father和Mother

super () 用法

  • 用于调用父类的绑定方法
  • 只应用在绑定方法中,自动传递 self 对象
  • 解决多继承调用关系

self 与 super 区别

  • self 先从当前类找方法,没有再找父类
  • super 直接从父类开始找方法

3. 多态

不同的子类对象,调用相同的父类方法,产生不同的执行效果。

python

运行

复制代码
class Soldier():
    # 攻击
    def attack(self):
        pass

# 陆军
class Army(Soldier):
    def attack(self):
        print("[陆军]上来拼刺刀")

# 海军
class Navy(Soldier):
    def attack(self):
        print("[海军]上来就扔鱼叉子")

# 空军
class AirForce(Soldier):
    def attack(self):
        print("[空军]用二营长的意大利炮射击")

# 多态体现
soldiers = [Army(), Navy(), AirForce()]
for soldier in soldiers:
    soldier.attack()  # 相同方法,不同实现

四、魔术方法

魔术方法是在特定时机自动触发的特殊方法,以双下划线开头和结尾。

1. init 构造方法

python

运行

复制代码
class Children():
    def __init__(self, name, skin):
        self.name = name  # 初始化对象属性
        self.skin = skin
        
obj = Children("王钢蛋", "黑色")  # 实例化时自动调用

2. new 方法

python

运行

复制代码
class MyClass():
    def __new__(cls):
        # 控制对象创建过程
        return object.__new__(cls)  # 创建并返回对象

单例模式(无论实例化多少次,都只有一个对象):

python

运行

复制代码
class Singleton():
    __obj = None
    def __new__(cls):
        if cls.__obj is None:
            cls.__obj = object.__new__(cls)
        return cls.__obj

3. del 析构方法

python

运行

复制代码
class LangDog():
    def __del__(self):
        print("对象被回收了")  # 对象被销毁时触发

obj = LangDog()
del obj  # 触发析构方法
相关推荐
Q_Q19632884753 小时前
python+uniapp基于微信小程序的助眠小程序
spring boot·python·小程序·django·flask·uni-app·node.js
wangqiaowq3 小时前
ImmutableList.of() 是 Google Guava 库 提供的一个静态工厂方法,用于创建一个不可变的(immutable)列表。
开发语言·windows·python
长空任鸟飞_阿康3 小时前
在 Vue 3.5 中优雅地集成 wangEditor,并定制“AI 工具”下拉菜单(总结/润色/翻译)
前端·vue.js·人工智能
lapiii3583 小时前
快速学完React计划(第一天)
前端·react.js·前端框架
苏打水com3 小时前
从 HTML/CSS/JS 到 React:前端进阶的平滑过渡指南
前端·javascript·html
滑水滑成滑头3 小时前
**发散创新:多智能体系统的探索与实践**随着人工智能技术的飞速发展,多智能体系统作为当今研究的热点领域,正受到越来越多关注
java·网络·人工智能·python
2401_841495643 小时前
【数据结构】最长的最短路径的求解
java·数据结构·c++·python·算法·最短路径·图搜索
一枚前端小能手3 小时前
🔐 单点登录还在手动跳转?这几个SSO实现技巧让你的用户体验飞起来
前端·javascript