python基础----09-----类、对象、魔法方法、封装、继承、类型注解、多态

news/2024/11/7 16:57:32/

一 初识对象

说白了就是类的实例化,类是一个抽象层的定义。
例如下面class Student就是定义的一个类,它是抽象层,然后stu_1 = Student(),我们根据类创建了一个对象,就是对类的实例化,这个实例化对象我们是可以操作的。

if __name__ == '__main__':# 1.设计一个类(类比生活中:设计一张登记表)class  Student:name = None        # 记录学生姓名gender = None        # 记录学生性别nationality = None        # 记录学生国籍native_place = None  # 记录学生籍贯age = None        # 记录学生年龄# 2.创建一个对象(类比生活中:打印- -张登记表)stu_1 = Student()# 3.对象属性进行赋值(类比生活中:填写表单)stu_1.name = "林军杰"stu_1.gender = "男"stu_1.nationality = "中国"stu_1.native_place = "山东省"stu_1.age = 31# 4.获取对象中记录的信息print(stu_1.name )print(stu_1.gender)print(stu_1.nationality)print(stu_1.native_place)

二 类的成员方法

现在我们来看看类的使用语法:

class 类名称:类的属性类的行为
  • class是关键字, 表示要定义类了。
  • 类的属性,即定义在类中的变量(成员变量)。
  • 类的行为, 即定义在类中的函数(成员方法)。
  • 创建类对象的语法对象=类名称()。

在这里插入图片描述

if __name__ == '__main__':# 1.设计一个类(类比生活中:设计一张登记表)class  Student:name = None        # 记录学生姓名def say_hi(self):print("he")def say_hi2(self,msg):print(f"hi,{msg}")# 调用方法s1 = Student()s1.say_hi()s1.say_hi2("wnm")

在这里插入图片描述

可以看到,在传入参数的时间,self是透明的,可以不用理会他。

if __name__ == '__main__':# 1.设计一个类(类比生活中:设计一张登记表)class  Student:name = None        # 记录学生姓名def say_hi(self):print("he",self.name)s1 = Student()s1.name = "wnm"s1.say_hi()#he wnm

在这里插入图片描述

三 构造方法

在这里插入图片描述

上面红色框是可以省略的,如果省略,在__init__函数中,那三行就相当于定义且赋值。而不省略,__init__函数就相当于仅赋值。

在这里插入图片描述

四 魔术方法

在这里插入图片描述

  • __init__函数:构造函数。
  • __str__函数:用于自定义打印对象。因为不定义的话,默认是打印出对象地址,而在python中地址没啥用。
  • __lt__函数:用于对象之间的小于、大于比较。
  • __le__函数:用于对象之间小于等于、大于等于的比较。
  • __eq__函数:用于对象之间是否相等的比较。

注意,上面这些魔术方法是用于自定义类时要用的,因为你自定义类,例如你要比较这个类的两个对象的大小,你不提供比较方法,python是不知道怎么比较的。

if __name__ == '__main__':class Student:# 构造函数def __init__(self, name, age):self.name = nameself.age = age# __str__魔术方法def __str__(self):return f"Student类对象,name:{self.name}, age:{self.age}"# __lt__魔术方法.def __lt__(self, other):return self.age < other.agedef __le__(self, other):return self.age <= other.agedef __eq__(self, other):return self.age == other.agestu1 = Student("周杰轮", 3)stu2 = Student("周轮", 3)# 测试__str__魔术方法print(stu1)# 测试__lt__魔术方法print(stu1 < stu2)# 测试__le__魔术方法print(stu1 <= stu2)# 测试__eq__魔术方法print(stu1 == stu2)

在这里插入图片描述

五 封装

面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象) ,使用对象完成功能开发。
面向对象包含3大主要特性:
➢封装。
➢继承。
➢多态。

例如我们将成员属性和成员方法封装到类中,就是封装。继承和多态要继续看下面的内容。

私有成员的定义:

如果不在变量名或者方法名前增加2个下划线,那么就是公有的变量或者方法,对象可以直接访问公有成员,而无法访问私有成员,但私有成员可以被类内的其它成员访问。

if __name__ == '__main__':class Phone:__current_voltage = 0.5# 当前手机运行电压def __keep_single_core(self):print("让CPU以单核模式运行")# 类内的方法可以使用私有成员__current_voltagedef call_by_5g(self):if self.__current_voltage >= 1:print("5g通话已开启")else:self.__keep_single_core()print("电量不足,无法使用5g通话,并已设置为单核运行进行省电。")phone = Phone()phone.call_by_5g()# 对象可以调用公有方法print(phone.__current_voltage)  # 报错,对象无法使用类私有成员phone.__current_voltage = 1 # 不报错,但相当于重新定义一个__current_voltage,与Phone内的__current_voltage不是同一个东西

在这里插入图片描述

六 继承的基础语法

6.1 单继承

语法:

class 类名(父类名):类内容体

例如:
在这里插入图片描述
继承之后,Phone2022同样可以使用Phone的成员和方法。

6.2 多继承

在这里插入图片描述

其中pass关键字是补全语法,表示定义一个空的。让语法补充,避免错误。当输出同名属性时,以前面为准,听父类的。

七 复写父类成员和调用父类成员

7.1 复写父类成员

什么是复写?
在这里插入图片描述

if __name__ == '__main__':class Phone:IMEI = None# 序列号producer = "ITCAST"  # 厂商def call_by_5g(se1f):print("父类的5g通话")class MyPhone(Phone):proucer = "ITHEIMA"# 复写父类属性def call_by_5g(se1f):# 复写父类方法print("子类的5g通话")phone = MyPhone()print(phone.proucer)phone.call_by_5g()'''ITHEIMA子类的5g通话'''

7.2 调用父类成员

调用父类的同名成员。
在这里插入图片描述

if __name__ == '__main__':class Phone:IMEI = None # 序列号producer = "ITCAST"  # 厂商def call_by_5g(se1f):print("父类的5g通话")class MyPhone(Phone):proucer = "ITHEIMA"# 复写父类属性def call_by_5g(se1f):# 调用父类方法# 方法1:print(f"父类的厂商是:{Phone.producer}")print("子类的5g通话")Phone.call_by_5g(se1f)# 方法2:print(f"父类的厂商是:{super().producer}")super().call_by_5g()phone = MyPhone()print(phone.proucer)phone.call_by_5g()

在这里插入图片描述

八 变量的类型注解

8.1 为何要类型注解

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

8.2 为变量设置类型注解

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.2 类型注解的限制

在这里插入图片描述

if __name__ == '__main__':# 基础数据类型注解var_1: int = 10var_2: str = "itheima"var_3: bool = True# 类对象类型注解class Student:passstu:Student = Student()# 基础容器类型注解.my_list: list = [1, 2, 3]my_tupLe: tuple = (1, 2,3)my_dict: dict = {"itheima": 666}# 在注释中进行类型注解my_list = [1, 2, 3]                  # type: listmy_tuple = ("itheima", 666, True)   # type: tuple[str, int, bool]# 类型注解的限制var_7: str = 10 #没事 但是是给自己看的

九 函数和方法类型注解

在这里插入图片描述

在这里插入图片描述

十 Union联合类型注解

在这里插入图片描述

出现混合类型时,可以通过Union联合类型添加注解。
在这里插入图片描述

十一 多态

多态:完成某个行为时,使用不同的对象会得到不同的状态。

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/291399.html

相关文章

忠诚之源:如何获得铁粉?

文章目录 一、铁粉二、如何吸引和留住铁粉的想法2.1 了解你的目标铁粉2.2 提供有价值的内容2.3 建立良好的关系2.4 持续优化和创新 三、具体可采用的一些方法3.1 提供优质内容3.2 社交媒体互动3.3 创建独特的品牌形象3.4 提供特殊待遇和奖励3.5 参与社区和活动3.6 持续互动和更…

webstorm+小程序相配合来开发小程序

前言&#xff1a; webstorm可以安装的一个小程序插件&#xff1a; wechat-miniprogram-plugin &#xff0c;来实现小程序语法的高亮&#xff0c;并识别 rpx 这种小程序专有单位&#xff0c;还可以实现跟开发者工具中一些类似的操作功能。 注意事项&#xff1a; 1、小程序的根目…

超图使用问题汇总

超图使用问题汇总 切地图栅格瓦片的时候&#xff0c;必须确认生成地图的源数据坐标系已经被识别&#xff0c;否则无法进行全球剖分 下图就是未识别坐标系的情况 切地图矢量瓦片的时候&#xff0c;需要使用idesktopx来切&#xff0c;idesktop无法生成矢量瓦片。 矢量瓦片切片时…

QQ小程序下载文件到本地

通过QQ小程序自带的qq.cloud.downloadFile可将文件从云端下载&#xff0c;并保存至一个临时目录。这时如果我想把文件保存到手机本地怎么办呢&#xff1f; 第一个想法是通过QQ小程序自带的qq.saveFile这个API&#xff0c;但是经过尝试后发现&#xff0c;这个保存的文件只有在小…

手机qq怎么添加相册表情包_手机qq怎么制作表情包配文字

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 手机qq制作表情包配文字的方法是&#xff1a; 1、找一个聊天对话框打开相册选择一张需要配字的表情包图片。 2、点击左下角的编辑。 3、点击文字。 4、输入文字后点击完成即可。 QQ…

android qq 文件怎么打开,如何更改腾讯QQ手机版默认的文件打开方式

手机QQ是陪伴我们时间最长的一款通讯社交软件了&#xff0c;最原始的腾讯QQ只可以用来聊聊天打视频电话什么的&#xff0c;但是随着科技和互联网的发展&#xff0c;QQ中已经出现了很多种新奇的功能了&#xff0c;这些功能让我们的生活变得更加的方便快捷&#xff0c;就比如我们…

下载腾讯视频里的视频_手机腾讯视频如何升级新版本

软件是否好用&#xff0c;还得大家下载腾讯视频安装才知道。本文分享怎么下载腾讯视频里的视频_手机腾讯视频如何升级新版本腾讯视频升级新版本。腾讯视频电影频道拥有大量高清在线电影资源&#xff0c;热门高清电影、好评电影、电影预告都可以在线观看&#xff0c;不去电影院也…

android qq音乐 本地歌曲,如何将手机qq音乐本地歌曲导入到电脑

如何将手机qq音乐本地歌曲导入到电脑?我们在使用手机qq音乐听歌的时候&#xff0c;会将自己喜欢的歌曲下载下来&#xff0c;现在想要将手机qq音乐中下载的歌曲导入到电脑里&#xff0c;具体该怎么操作?下面就是手机qq音乐本地歌曲导入到电脑中的教程&#xff0c;一起来看一下…