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  # 触发析构方法
相关推荐
方也_arkling7 分钟前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐10 分钟前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
A懿轩A22 分钟前
【Java 基础编程】Java 变量与八大基本数据类型详解:从声明到类型转换,零基础也能看懂
java·开发语言·python
web打印社区24 分钟前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
Tansmjs38 分钟前
使用Python自动收发邮件
jvm·数据库·python
m0_5613596741 分钟前
用Python监控系统日志并发送警报
jvm·数据库·python
RFCEO43 分钟前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
Dxy12393102161 小时前
MySQL INSERT ... ON DUPLICATE KEY UPDATE 与非主键唯一字段
数据库·mysql
idwangzhen1 小时前
GEO优化系统哪个功能强大
python·信息可视化
Amumu121381 小时前
Vuex介绍
前端·javascript·vue.js