Python面向对象

news2025/1/16 3:31:49

目录

1.初识对象

2. 类的成员方法

3. 类和对象

4. 构造方法

5. 其它内置方法

6. 封装

7. 继承

7.1 继承的基础语法

7.2 复写和调用父类成员

8. 多态


1.初识对象

1. 生活中或是程序中,我们都可以使用设计表格、生产表格、填写表格的形式组织数据。

2. 进行对比,在程序中:

设计表格,称之为:设计类(class)

打印表格,称之为:创建对象

填写表格,称之为:对象属性赋值

# 设计类
class Student:
    name = None
    age = None
    sex = None

# 创建对象
stu_1 = Student()

# 对象属性赋值
stu_1.name = "张三"
stu_1.age = 18
stu_1.sex = "男"
# 张三
print(stu_1.name)
# 18
print(stu_1.age)
# 男
print(stu_1.sex)

2. 类的成员方法

1.类是由哪两部分组成?

  • 类的属性:成员变量。
  • 类的行为:成员方法。

注意:函数是定义在类外的,而方法是定义类内的。

2.类和成员方法的定义语法

3.self的作用

  • self表示类对象本身的作用。
  • 只有通过self,成员方法才能访问类的成员变量。
  • self虽然出现在形参列表中,但是不占用参数位置。
class Student:
    name = None

    def say_hi(self):
        print(f"大家好,我是{self.name},请多多指教!")

    def say_hi2(self,msg):
        print(f"大家好,我是{self.name},{msg}")

stu1 = Student()
stu1.name = "张三"
stu1.say_hi()

stu2 = Student()
stu2.name = "李四"
stu2.say_hi2("请多多关照!")

3. 类和对象

1. 现实世界的事物由什么组成?

  • 属性
  • 行为

类也可以包含属性和行为,所以使用类描述现实世界事物是非常合适的。

2. 类和对象的关系是什么?

  • 类是程序中的“设计图纸”。
  • 对象是基于图纸生产的具体实体。

3. 什么是面向对象编程?

  • 面向对象编程就是,使用对象进行编程。
  • 即,设计类,基于类创建对象,并使用对象来完成具体的工作。
# 设计类
class Clock:
    # 序列号
    id = None
    # 零售价
    price = None

    # 响铃
    def ring(self):
        import winsound
        winsound.Beep(2000,3000)

# 创建对象
clock1 = Clock()
# 给对象属性赋值
clock1.id = "1001"
clock1.price = 19.99
# 使用对象的属性和方法
print(f"闹钟ID:{clock1.id},价格:{clock1.price}")
clock1.ring()

# 创建对象
clock2 = Clock()
# 给对象属性赋值
clock2.id = "1002"
clock2.price = 29.99
# 使用对象的属性和方法
print(f"闹钟ID:{clock2.id},价格:{clock2.price}")
clock2.ring()

4. 构造方法

1.构造方法的名称:

__init__,注意init前后的2个下划线符号。

2.构造方法的作用:

构建类对象的时候会自动运行

构建类对象的传参会传递给构造方法,借此特性可以给成员变量赋值

3.注意事项:

构造方法不要忘记self关键字。

在方法内使用成员变量需要使用self。

案例

# 设计类
class Student:
    # # 成员变量
    # name = None
    # age = None
    # address = None

    # 构造方法
    def __init__(self,name,age,address):
        self.name = name
        self.age = age
        self.address = address

# 循环录入学生信息并打印学生信息
for i in range(3):
    print(f"当前录入第{i+1}学生信息,总共需要录入2位学生信息")
    name = input("请输入姓名:")
    age = input("请输入年龄:")
    address = input("请输入地址:")
    # 创建对象
    stu = Student(name,age,address)
    # 打印学生信息
    print(f"学生{i+1}信息录入完成,信息为:【姓名:{stu.name},年龄:{stu.age},地址:{stu.address}】")
    print("-"*47)

5. 其它内置方法

方法

功能

__init__

构造方法,可用于创建类对象的时候设置初始化行为

__str__

用于实现类对象转字符串的行为

__lt__

用于2个类对象进行小于或大于比较

__le__

用于2个类对象进行小于等于或大于等于比较

__eq__

用于2个类对象进行相等比较

class Student:
    # __init__构造方法
    def __init__(self,name,age):
        self.name = name
        self.age = age

    # __str__字符串方法
    def __str__(self):
        return f"name={self.name},age={self.age}"

    # __lt__小于符号比较方法
    def __lt__(self, other):
        return self.age < other.age

    # __le__小于等于比较方法
    def __le__(self, other):
        return self.age <= other.age

    # __eq__比较运算符实现方法
    def __eq__(self, other):
        return self.age == other.age

stu1 = Student("张三",20)
stu2 = Student("李四",21)
stu3 = Student("王五",20)

'''
调用__str__字符串方法
'''
# name=张三,age=20
print(stu1)
# name=李四,age=21
print(str(stu2))

'''
__lt__小于符号比较方法
'''
# True
print(stu1 < stu2)
# False
print(stu1 > stu2)


'''
__le__小于等于比较方法
'''
# True
print(stu1 <= stu3)
# False
print(stu1 >= stu2)

'''
__eq__比较运算符实现方法
'''
# 若不实现__eq__方法,对象之间可以比较,但是比较的是对象的内存地址
# 若实现__eq__方法,就按照自己的想法来决定2个对象是否相等
# True
print(stu1 == stu3)

6. 封装

1.封装的概念?

将现实世界事物在类中描述为属性和方法,即为封装。

2.什么是私有成员?为什么需要私有成员?

现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,这就需要定义私有成员了。

3.如何定义私有成员?

成员变量和成员方法的命名均以__作为开头即可。

4.私有成员的访问限制?

  • 类中的其它成员可以访问私有成员。
  • 类对象无法访问私有成员。

案例

class Phone:
    # 私有成员变量(对用户隐藏)
    __is_5g_enable = False  # 5g状态

    # 私有成员方法(对用户隐藏)
    def __check_5g(self):
        if self.__is_5g_enable:
            print("5g开启")
        else:
            print("5g关闭,使用4g网络")

    # 公开成员方法(对用户公开)
    def call_by_5g(self):
        self.__check_5g()
        print("正在通话中")

phone = Phone()
phone.call_by_5g()

7. 继承

7.1 继承的基础语法

1.什么是继承?

继承就是一个类,继承另外一个类的成员变量和成员方法。

语法:

子类构建的类对象,可以:

  • 使用父类的成员变量和成员方法。
  • 有自己的成员变量和成员方法。

2.单继承和多继承

单继承:一个类继承另一个类。

多继承:一个类继承多个类,按照顺序从左到右依次继承。

多继承中,如果父类有同名方法和属性,先继承的优先级高于后继承。

3.pass关键字的作用

pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思。

'''
单继承
'''
class Phone:
    # 序列号
    IMEI = None
    # 厂商
    producer = "HW"


    def call_by_4g(self):
        print("4g通话")

class Phone2022(Phone):
    # 面部识别
    face_id = True

    def call_by_5g(self):
        print("2022最新5g通话")

Phone2022 = Phone2022()
# 4g通话
Phone2022.call_by_4g()
# 2022最新5g通话
Phone2022.call_by_5g()

'''
多继承
'''
class NFCReader:
    nfc_type = "第五代"
    producer = "HM"

    def read_card(self):
        print("读取NFC卡")

    def write_card(self):
        print("写入NFC卡")

class MyPhone(Phone,NFCReader):
    pass

my_phone = MyPhone()
# 4g通话
my_phone.call_by_4g()
# 读取NFC卡
my_phone.read_card()
# 多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级
# HW
print(my_phone.producer)

7.2 复写和调用父类成员

1.复写表示:

对父类的成员属性或成员方法重新定义。

2.复写语法:

在子类中重新实现同名成员方法或成员属性即可。

3.在子类中,如何调用父类成员?

 注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类复写的。

class Phone:
    IMEI = None
    producer = "ITCAST"

    def call_by_5g(self):
        print("父类的5g通话")

# 子类1复写父类的成员属性和成员方法
class MyPhone1(Phone):
    producer = "ITHEIMA"

    def call_by_5g(self):
        print("子类的5g通话")

# 子类2复写父类的成员属性和成员方法,并在成员方法中调用父类成员
class MyPhone2(Phone):
    producer = "ITHEIMA"

    def call_by_5g(self):
        # # 方式1调用父类成员
        # print(f"父类的品牌是:{Phone.producer}")
        # Phone.call_by_5g(self)

        # 方式2调用父类成员
        print(f"父类的品牌是:{super().producer}")
        super().call_by_5g()
        print("子类的5g通话")

'''
子类的实体类对象调用的成员默认是调用子类复写的。
'''
my_phone1 = MyPhone1()
# ITHEIMA
print(my_phone1.producer)
# 子类的5g通话
my_phone1.call_by_5g()

my_phone2 = MyPhone2()
# 父类的品牌是:ITCAST
# 父类的5g通话
# 子类的5g通话
my_phone2.call_by_5g()

8. 多态

1.什么是多态?

多态指的是,同一个行为,使用不同的对象获得不同的状态。 如,定义函数(方法),通过类型注解声明需要父类对象,实际传入子类对象进行工作,从而获得不同的工作状态。

2.什么是抽象类(接口)?

包含抽象方法的类,称之为抽象类。抽象方法是指:没有具体实现的方法(pass)称之为抽象方法。

3.抽象类的作用

多用于做顶层设计(设计标准),以便子类做具体实现。 也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法并配合多态使用,获得不同的工作状态。

# 设计抽象类
class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("汪汪汪")

class Cat(Animal):
    def speak(self):
        print("喵喵喵")

# 定义函数,实现多态
def make_noise(animal: Animal):
    animal.speak()

dog = Dog()
cat = Cat()
# 汪汪汪
make_noise(dog)
# 喵喵喵
make_noise(cat)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2011】408联考操作系统真题整理

2011年 23 题目 满足短作业优先且不会发生饥饿现象的调度算法&#xff1a;高响应比优先 解析 24 题目 用户态执行的是命令解释程序 解析 法一&#xff1a;正向选择 DOS对应联机命令接口 法二&#xff1a;逆向排除 非用户态 -> 内核态 25 题目 在支持多线程的…

vs2019搭建与配置Qt,并实现影像显示

vs2019搭建与配置Qt&#xff0c;并实现影像显示 1.关于qt在vs2019的配置 主要参考了这个博客 其中有一个我在配置过程中出现的问题&#xff0c;在此记录一下 Qt Visual Studio Tools 在vs2019一直无法加载&#xff0c;一直在initializing,且提示"未能正确加载qtvstools…

数据库的基本操作(4)

先总结一下上一章的内容。 1.修改 update 表名 set 列名 值... where 条件&#xff1b; 2.删除 delete from 表名 where 条件&#xff1b; 3.mysql的约束 约束&#xff1a;数据库对数据本身有一些要求和限制。 NOT NULL 数据不能为空。 UNIQUE 数据唯一&#xff08;针…

【目标检测】目标检测的评价指标(七个)

目录&#xff1a;目标检测的评价指标一、正样本与负样本二、真正(TP)、假正(FP)、真负(TN)、假负(FN)&#xff08;1&#xff09;正确的正向预测&#xff08;True Positive&#xff0c;TP&#xff09;&#xff1a;正样本被正确检测的数量&#xff08;2&#xff09;错误的正向预测…

国际海运详解:国际海运的发货方式有哪些?区别是什么?

在跨境物流运输中&#xff0c;海运是一个种常用的运输方式&#xff0c;下面来重点介绍国际海运的几种发货方式和区别&#xff1a; 一、电放提单 是电报放货的缩写。提单信息以电子报纸或电子信息的形式发送给目的港船公司&#xff0c;收货人可以更换加盖电子印章的提单和电子保…

LeetCode-775-全局倒置与局部倒置

1、数学方法 根据题意&#xff0c;显然全局倒置的值大于等于局部倒置的值。因此我们不必求出具体的全局倒置的值和局部倒置的值&#xff0c;我们只需要证明全局倒置的值大于局部倒置的值即可。 因此我们可以从后往前进行查询&#xff0c;只要我们能够证明区间[i1,n−1][i1,n-…

小啊呜产品读书笔记001:《邱岳的产品手记-02》开篇词010203讲

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-02》 开篇词&01&02&03讲一、今日阅读计划二、泛读&知识摘录1、开篇词 产品经理的世界没有对错2、01讲 验证码是个好设计吗&#xff1f;3、02讲 产品经理工具指南4、03讲 产品案例分析Trigraphy的设计哲学三…

VS2019编码修改为UTF-8的方法

1.修改windows系统配置 设置 时区和语言 语言 》 管理语言设置 2. 修改VS2019 在扩展里安装Force UTF-8(No BOM) 和 Fix File Encoding 插件 解决控制台中文乱码问题 1.按下winr&#xff0c;输出regedit&#xff0c;打开注册表编辑器 2.在注册表编辑器中打开路径HKE…

VBA调用宏的方式总结大全

文章目录背景方式一 : Excel菜单执行宏方式二 : 按钮绑定宏1. 插入按钮2. 绑定宏方式三 : 窗体绑定宏1. 插入窗体2. 拖入按钮3. 绑定按钮点击事件触发宏(写代码)方式四 : 事件绑定宏背景 很多小伙伴在拿到模型之后, 看着满屏的代码, 却不知道如何下手使用这些代码. 这篇文章就…

【DOTS学习笔记】面向数据设计DOD

目录前言程序设计方法ODD->DODCache的3C与3R面向数据设计需要思考的问题AOSSOADOTS面向数据设计原则前言 本文是Metaverse大衍神君的《DOTS之路》系列课程的学习笔记 程序设计方法 Instructional Programming 指令化编程 脱离指令打孔输入后&#xff0c;伴随着机器汇编语言…

操作系统4小时速成:进程同步,临界资源,互斥,信号量的作用,死锁产生的四个条件,安全状态,银行家算法

操作系统4小时速成&#xff1a;进程同步&#xff0c;临界资源&#xff0c;互斥&#xff0c;信号量的作用&#xff0c;死锁产生的四个条件&#xff0c;安全状态&#xff0c;银行家算法 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&am…

vhost dpdk 共享内存

struct kvm_memory_slot http://tinylab.org/kvm-intro-part1 https://www.cnblogs.com/LoyenWang/p/13943005.html &#xff08;免费订阅,永久学习&#xff09;学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂 更多DPDK相关学习资料有…

Mybatis-Plus——分页+模糊查询

建表&#xff1a; create table pms_brand (brand_id bigint not null auto_increment comment 品牌id,name char(50) comment 品牌名,logo varchar(2000) comment 品牌logo地址,descript longtext comment 介绍,sh…

使用ReentrantLock中的条件变量让多个线程顺序执行

一. 前言 近日壹哥的一个学生在参加某公司校招面试时&#xff0c;遇到一个多个线程顺序执行的面试题&#xff0c;特意记录下来和大家分享一下&#xff0c;这个题目的具体要求是这样的&#xff1a; 假设有3个线程 a,b,c&#xff0c;要求三个线程一起进入到就绪态&#xff0c;执…

【LeetCode】775. 全局倒置与局部倒置

题目描述 给你一个长度为 n 的整数数组 nums &#xff0c;表示由范围 [0, n - 1] 内所有整数组成的一个排列。 全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目&#xff1a; 0 < i < j < n nums[i] > nums[j] 局部倒置 的数目等于满足下述条件的下标 i 的…

01-Linux

1 初识Linux 在前面的课程中&#xff0c;我们无论是开发、测试。部署、存储都在Windwos操作系统的环境中&#xff0c;从今天开始我们一起学习下Linux,Linux系统和Windows系统最大的区别就是图形化界面操作和用途上有所差异&#xff0c;除了这两点&#xff0c;两者有异曲同工之…

跑通官方的yolov7-tiny实验记录(yolov7-tiny可作为yolov5s的对比实验网络)

目录1. 一些可用的参考链接2. 开始训练yolov72.1 --weights2.2 --cfg2.3 --data2.4 --hyp2.5 --epochs2.6 --batch-size2.7 --workers2.8 --name1. 一些可用的参考链接 官方YOLOv7 项目地址&#xff1a;https://github.com/WongKinYiu/yolov7如果想设置早停机制&#xff0c;可…

2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置

任务 设计并实现李萨如&#xff08;Lissajous&#xff09;图形演示装置&#xff0c;如图 1 所示。输入正弦信号作为 x 轴信号&#xff0c;其峰峰值 2V&#xff0c;频率 1.5kHz~2kHz&#xff1b;对输入的正弦信号进行幅度和频率变换后产生 y 轴信号&#xff1b;装置显示器上显示…

CentOS7 离线安装 Python

目录1.前言2.下载Python及依赖环境&#xff08;1&#xff09;下载Python源码&#xff08;2&#xff09;下载Python依赖文件&#xff08;3&#xff09;下载gcc环境文件&#xff08;备用&#xff09;3.上传至离线服务器&#xff08;1&#xff09;核对已下载离线文件&#xff08;2…

基于PSO粒子群优化的汽车刹车稳定性数据matlab仿真与分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 刹车类别A 温度1 测试1 测试2 ....... 测试n 温度3 测试1 测试2 ....... 测试n ....... ....... 温度N 测试1 …