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  # 触发析构方法
相关推荐
JeffongTan5 小时前
在LWC中镶嵌VF Page获取用户IP
前端·javascript·salesforce
2601_962293245 小时前
Python自动化统计团队工作量并生成可视化仪表盘的脚本方案【指导】
python·数据分析·自动化·可视化·仪表盘
2601_962293796 小时前
OCRmyPDF批处理脚本:使用Python自动化复杂OCR任务
python·自动化·批处理脚本·ocrmypdf·ocr任务
袋鼠云数栈7 小时前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
陆枫Larry7 小时前
Astro 是什么
前端
ACP广源盛139246256737 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
Java后端的Ai之路7 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
ACP广源盛139246256737 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
2601_962077718 小时前
基于Python与NLP的新闻事件信息抽取实战:从NER到时空标准化
python·nlp·transformers·spacy·新闻事件抽取
是立不是利8 小时前
写给设计师的 CSS 博客美学指南
前端·css