Python第二语言(十、Python面向对象(上))

news2024/11/26 10:27:32

目录

1. 标记变量的基础类型

2. 初识对象

2.1 使用对象组织数据

3. 成员变量

3.1 类和类成员的定义

3.2 成员变量和成员方法使用

3.3 成员方法的定义语句

4. 类和对象class Clock: def ring(self):

4.1 创建类对象的语法:对象名 = 类名称()

4.2 用生活中的物件来解释对象

4.3 基于类创建对象

5. 构造方法:__init__()方法

5.1 构造方法

5.2 构造方法注意事项

6. 魔术方法:__init__ 、__str__...

6.1 __str__字符串方法:控制类转换成字符串的行为;

6.2 __lt__小于符号比较方法:对2个对象进行比较;

6.3 __le__小于等于比较符号方法:对2个对象进行比较;

6.4 __eq__,比较运算符实现方法,判断对象的值是否相等;


1. 标记变量的基础类型

方便了解变量的基础类型;

语法:变量: 类型

# 基础数据类型注解
var_1: int = 10
var_2: float = 3.55
var_3: bool = True
var_4: str = "zhangSan"

class Student:
    pass


# 类对象类型注解
stu: Student = Student()

2. 初识对象

2.1 使用对象组织数据

1. 在程序中设计表格:设计类(class)

class Student:
    name = None  #记录学生姓名

2. 在程序中打印生产表格:创建对象

# 基于类创建对象
stu_1 = Student()
stu_2 = Student()

3. 在程序中填写表格:对象属性赋值

stu_1.name ="zhangSan"  # 为学生1对象赋予名称属性值
stu_2.name ="lisi"  # 为学生2对象赋予名称属性值

4. 打印对象结果;

小结:

  • 在程序中是可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的;
  • 与程序进行对比:
    1. 在程序中设计表格:设计类(class)
    2. 在程序中打印生产表格:创建对象
    3. 在程序中填写表格:对象属性赋值

3. 成员变量

3.1 类和类成员的定义
  • 我们可以使用类去封装属性,并基于类创建出一个个的对象来使用;
  • 而类的成员一般都会有:成员变量,成员方法
  • 创建类对象的语法:对象 = 类名称()
class 类名称:  # class是关键字,表示定义一个类
    类的属性  # 即定义在类中的变量(成员变量)
    类的行为  # 即定义在类中的函数(成员方法)
3.2 成员变量和成员方法使用
  • 类中定义的属性(变量)称之为:成员变量;
  • 类中定义的行为(函数)称之为:成员方法;
class Student:
    name = None
    age = None

    def say_hi(self):
        print(f"大家好!我是{self.name}")  # 2.self.调用成员变量


stu = Student()
stu.name = "zhangSan"  # 1.成员变量的赋值
stu.say_hi()

3.3 成员方法的定义语句

1. 成员方法定义和self关键字:

  • 在类中定义成员方法和定义函数基本一致:
def 方法名(se1f,形参1,.....·,形参N):
    方法体

  • self关键字:self关键字是成员方法定义的时候,必须填写的;
    1. 它用来表示类对象自身的意思;
    2. 当我们使用类对象调用方法时,self会自动被python传入;
    3. 在方法内部,想要访问类的成员变量,必须使用self;

2. 类的行为:

  1. 在定义类行为时,若无传入的形参,则在相对应调用类的方法时,即可不用传递参数;
  2. 在定义类行为时,如果定义了形参,这时候在调用类的方法时,就必须传入对应的实参;
  3. 想要访问成员属性,必须使用self,但是如果是传递的参数,就可以不用,注意,self是必写的关键字,用来调用成员变量;
class Student:
    name = None
    age = None

    def say_hi(self):
        print("大家好!")

    def say_hi1(self, name):
        print(f"大家好!我是{name}")


stu = Student()
stu.say_hi()  # 调用时无需传参
stu.say_hi1("zhangSan")  # 调用时按照成员需要传递name实参

4. 类和对象class Clock: def ring(self):

  • 概念:类就是一个模板,对象就是实现类的实体;
4.1 创建类对象的语法:对象名 = 类名称()

        为什么要创建对象:因为类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作,这种方式通常称为:面向对象编程;

4.2 用生活中的物件来解释对象
  • 就比如闹钟:
    1. 一个闹钟就好比一个对象;
    2. 那么对象的属性就是闹钟的价格,型号、品牌;
    3. 那么闹钟的行为就好比:闹钟响铃;
4.3 基于类创建对象

winsound类:可以让计算机发出一点声音;

# 设计一个闹钟类
class Clock:
    price = None  # 价格
    size = None  # 型号
    brand = None  # 品牌

    def ring(self):
        import winsound
        print("闹钟开始响铃...")
        winsound.Beep(2000, 1000)  # 频率,持续时间



# 构建闹钟对象并让其工作,clock就是闹钟的对象
clock = Clock()
clock.price = 10
clock.size = "标准型"
clock.brand = "小米"
print(f"闹钟价格{clock.price}元,型号:{clock.size},品牌:{clock.brand}")
clock.ring()  # 闹钟响铃行为

小结:

  1. 现实世界的事物由什么组成?
    • 属性;
    • 行为;
    • 类也可以包含属性和行为,所以使用类描述现实世界事物是非常合透的;
  2. 类和对象的关系是什么?
    • 类是程序中的“设计图纸”;
    • 对象是基于图纸生产的具体实体;
  3. 什么是面向对象编程?
    • 面向对象编程就是,使用对象进行编程;
    • 即,设计类,基于类创建对象,并使用对象来完成具体的工作;

5. 构造方法:__init__()方法

  • 大致就是一个类,可以直接定义init构造方法,直接省去类的成员属性定义,而直接将成员属性定义在init中,并且在类创建时,会自动执行init构造方法,并将传入的参数自动传递给init方法使用;
5.1 构造方法

上面类的属性可以省略不写,在init中已经声明了;

Python类可以使用:_ init() _方法,称之为构造方法:

可以实现:

  • 在创建类对象(构造类)的时候,会自动执行;
  • 在创建类对象(构造类)的时候,将传入参数自动传递给init方法使用;
class Student:
    # name = None
    # age = None  省略成员属性
    # tel = None

    def __init__(self, name, age, tel):  # 构建类时传入的参数会自动提供给__init__方法,并在构建类的时候__init__方法会自动执行
        self.name = name
        self.age = age
        self.tel = tel
        print("Stu类创建了一个对象", f"学生名是:{name}")


sut = Student("zhangSan", 28, "18300000000")

5.2 构造方法注意事项
  1. 使用_ init _时,注意前后都有2个下划线;
  2. 构造方法也是成员方法,不用忘记在参数列表中提供:self关键字;
  3. 在构造方法内定义成员变量,需要使用self关键字,意思是要成为成员变量,需要用self来表示;
    def __init__(self, name, age, tel):  # 构建类时传入的参数会自动提供给__init__方法,并在构建类的时候__init__方法会自动执行
        self.name = name
        self.age = age
        self.tel = tel
        print("Stu类创建了一个对象", f"学生名是:{name}")

6. 魔术方法:__init__ 、__str__...

  • 概念:

    不仅仅只有这几个魔术方法,在python中有大概二三十个;

    比如说__init__ 就是python类内置的方法之一;

    这些内置的类方法,各自有各自特殊的功能,这些内置方法称为魔术方法;

    • 常见的魔术方法:
      1. __init__ :构造方法
      2. __str__ :字符串方法
      3. __lt__ :小于,大于符号比较
      4. __le__ :小于等于,大于等于符号比较
      5. __eq__ :==符号比较
  • 可以结合放在一段代码中案例;
6.1 __str__字符串方法:控制类转换成字符串的行为;

类创建时,自动执行__str__魔术方法;

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"Student类对象,name={self.name},age={self.age}"


student = Student("zhangSan", 28)
print(student)
print(str(student))

6.2 __lt__小于符号比较方法:对2个对象进行比较;

同时__lt__也支持大于符号的判断,但是不支持小于等于或大于等于判断;

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"Student类对象,name={self.name},age={self.age}"

    def __lt__(self, other):  # 传入参数:other,另一个对象,返回值:True和False
        return self.age < other.age


student = Student("zhangSan", 28)
student1 = Student("zhangSan", 30)
print(student < student1)

6.3 __le__小于等于比较符号方法:对2个对象进行比较;

同时支持大于等于判断;等于符号也可以支持;

在这里两个对象相==判断是否相等是判断两个对象的内存地址是否相等,答案会为False;而比较对象值是否相等要使用__eq__;

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __le__(self, other):  # 传入参数:other,另一个对象,返回值:True和False
        return self.age <= other.age


student = Student("zhangSan", 28)
student1 = Student("zhangSan", 30)
print(student <= student1)

6.4 __eq__,比较运算符实现方法,判断对象的值是否相等;
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __eq__(self, other):  # 传入参数:other,另一个对象,返回值:True和False
        return self.age == other.age


student = Student("zhangSan", 30)
student1 = Student("zhangSan", 30)
print(student == student1)

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

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

相关文章

如何用Pycharm把python代码打包成exe文件

在terminal 里面输入pyinstaller --onefile --noconsole chuli_v2.py –noconsole 这个选项会生成一个不带控制台窗口的 .exe 文件

开发移动端常见的问题:VW适配问题,基于 postcss 插件 实现项目vw适配

当你开发移动端的时候有一个问题是避免不了的&#xff0c;那就是当屏幕大小无论怎么变化时&#xff0c;内部尺寸也要随之发生改变&#xff0c;也就是适配问题。这里我们讲的是最新的VW适配&#xff0c;也就是用vw作为单位&#xff0c;100vw是整个页面的大小。而在开发的设计图中…

Solr 日志系统7.4.0部署和迁移到本地,Core Admin 添加新的core报错

文章目录 Solr部署Docker部署二进制部署 Tips:Solr设置账号密码方法1&#xff1a;(不使用)方法2&#xff1a; Core Admin 添加新的core报错Solr数据迁移 Solr部署 Docker部署 docker run -d -p 8983:8983 --name solr solr:latest docker run -d -p 8983:8983 -v /opt/solr:/…

随便写写之——CSDN个人主页布局(二)

现在是中午11点30&#xff0c;还是有点迷糊&#xff0c;也不知道怎么了。 继续写写这个界面吧 代码太多了。吧上边的丢到组件里 加个图片好了&#xff0c;不然太丑了&#xff0c;看下main_haeader的布局 都是些比较简单的布局&#xff0c;头像这边就用了一个绝对定位定在了左…

java多线程临界区介绍

在Java多线程编程中&#xff0c;"临界区"是指一段必须互斥执行的代码区域。当多个线程访问共享资源时&#xff0c;为了防止数据不一致或逻辑错误&#xff0c;需要确保同一时刻只有一个线程可以进入临界区。Java提供了多种机制来实现这一点&#xff0c;例如synchroniz…

2024-6-12-IXI(mat)应用到SR的代码解读

数据集 Download and decompress data from the link 百度网盘 请输入提取码 Password: qrlt Transform .h5 format to .mat format "python convertH5tomat.py --data_dir XXX/T2Net/h5 论文:Task Transformer Network for Joint MRI Reconstruction and Super-Resoluti…

甲骨文新业绩发布!云业务同比增长42%,盘后股价上涨9%

KlipC报道&#xff1a;当地时间6月11日&#xff0c;甲骨文发布了2024财年年报以及2024第四季度的业绩报告。2024财年营收529.61亿美元&#xff0c;同比增长6.02%&#xff1b;净利润104.67亿美元&#xff0c;同比增长23.1%。 第四季度营收同比增长3.3%&#xff0c;达到143亿美元…

Mysql学习(九)——存储引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 七、存储引擎7.1 MySQL体系结构7.2 存储引擎简介7.3 存储引擎特点7.4 存储引擎选择7.5 总结 七、存储引擎 7.1 MySQL体系结构 连接层&#xff1a;最上层是一些客户…

Font Creator使用方法,将第三方.ttf字符拷贝至自定义ttf字体

网上官网下载FontCreator&#xff0c;打开&#xff0c;使用免费版&#xff0c;直接拖拽.ttf进入工程 拷贝Google字库ttf到自定义Custom字库方法&#xff1a; 完成后导出 导出配置我保持默认的&#xff0c;路径选下就好了

前端加载 动画特效

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>加载动画</title><style type="text/css">/* 设置页面背景颜色 */body {background: #ECF0F1;}/* 定义加载动画容器的样式…

vue3第三十九节(TS中的高级类型,分类以及使用注意事项)

前言&#xff1a;为什么需要使用高级类型&#xff0c;正常的类型不能满足日常的业务需求&#xff0c;对于复杂的数据结构、函数签名、类型转换&#xff0c;我们需要使用高级类型来处理&#xff0c;常用的高级类型包含以下几种&#xff1a; 常用的类型定义&#xff1a; 基本类…

vs2015+win10编译LAStools

文章目录 下载LasTool安装包编译laslib测试 下载LasTool安装包 不要再GitHub上下载&#xff0c;在官网下载&#xff1a;link 编译laslib 将压缩包解压到对应路径下&#xff0c;注意路径下不要有空格和汉字。用vs打开目录下的 “lastools.dsw” 文件 下面注意几点&#xff1a…

Python解析Word文档的自动编号

关于自动编号的知识可以参考《在 Open XML WordprocessingML 中使用编号列表》 链接&#xff1a;https://learn.microsoft.com/zh-cn/previous-versions/office/ee922775(voffice.14) python-docx库并不能直接解析出Word文档的自动编号&#xff0c;因为原理较为复杂&#xff…

0502 构成分析设计MOS管放大电路与FET异同点

构成&分析&设计MOS管放大电路&与FET有何异同点 MOSFET需具备什么样的条件才能正常放大信号&#xff1f;如何构成MOSFET放大电路如何分析和设计MOSFET放大电路1.图解分析 2.直流偏置及静态工作点的计算![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fc…

6.7.31 使用端到端训练的基于 EfficientNet 的卷积网络在双视图乳房 X 线摄影中进行乳腺癌诊断

最好的技术之一进行了两次迁移学习:第一种是使用在自然图像上训练的模型来创建“块分类器”,对子图像进行分类;第二种是使用块分类器扫描整个乳房 X 光检查并创建“单视图全图像分类器”。建议进行第三次迁移学习,以获得一个“双视图分类器”,以使用两个乳房 X 光检查视图…

每日复盘-202406012

今日关注&#xff1a; 这几天市场打板情绪环境转好&#xff0c;轻仓试错 20240612 六日涨幅最大: ------1--------605258--------- 协和电子 五日涨幅最大: ------1--------605258--------- 协和电子 四日涨幅最大: ------1--------301036--------- 双乐股份 三日涨幅最大: --…

《亿级流量网站架构核心技术》-高可用-限流详解

背景 项目中遇到一个场景&#xff0c;用户点击按钮给缺勤员工发送扣薪通知。按照需求是一个月只会发送一次通知&#xff0c;在代码逻辑中已经做了兜底策略--在发送邮件之前先判断本月通知是否已发送&#xff0c;发送完之后将发送状态进行持久化。发邮件的时间大概在1分钟之内。…

看了这面经,测开上岸不远了

前段时间和4位来自百度、美团、快手、滴滴的高级测开大厂学长学姐&#xff0c;进行了一场直播&#xff0c;负责解答24届春招补录&25届找实习同学的问题 当天直播时长达2个小时&#xff0c;对于如何找测开实习&#xff0c;需要怎么准备项目&#xff0c;简历怎么写&#xff…

每天五分钟计算机视觉:如何在现有经典的卷积神经网络上进行微调

本文重点 在深度学习领域,卷积神经网络(Convolutional Neural Networks,CNN)因其强大的特征提取和分类能力而广泛应用于图像识别、自然语言处理等多个领域。然而,从头开始训练一个CNN模型往往需要大量的数据和计算资源,且训练时间较长。幸运的是,迁移学习(Transfer Le…

MySQL系列-语法说明以及基本操作(二)

1、MySQL数据表的约束 1.1、MySQL主键 “主键&#xff08;PRIMARY KEY&#xff09;”的完整称呼是“主键约束”。 MySQL 主键约束是一个列或者列的组合&#xff0c;其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键&#xff0c;通过它可以强制表的实体完整性。 …