面向对象程序设计

class是关键字,表示要定义类了

类的属性,即定义在类中的变量(成员变量)

类的行为,即定义在类中的函数(成员方法)

self关键字是成员方法定义的时候,必须填写的。

  1. 它用来表示类对象自身的意思
  2. 当我们使用类对象调用方法时,self会自动被py传入
  3. 在方法内部,想要访问类的成员变量,必须使用self
class Student:name=Noneage=Nonedef fun(self):print(self.name)#访问类中的成员变量,需要用self访问

__init__() 构造方法

可以实现:

在创建类对象是会自动执行,将参数自动传递给__init__()方法使用

class Student:def __init__(self,name,age,id):self.name=nameself.age=ageself.id=idprint('创建对象自动调用此方法')student1=Student('zhangsan',19,'0001')

类内置方法(魔术方法):


__str__:

控制类转换成字符串的行为

class Student:def __init__(self,name,age,id):self.name=nameself.age=ageself.id=idprint('创建对象自动调用此方法')def __str__(self):return f'name:{self.name},age:{self.age}'student1=Student('zhangsan',19,'0001')print(str(student1))
#name:zhangsan,age:19#若不写__str__方法,则输出的是地址值
__lt__:


直接比较两个对象是不可以的,但是在类中实现__lt__()方法的符号比较,即可同时完成<  > 两种比较

class Student:def __init__(self,name,age,id):self.name=nameself.age=ageself.id=idprint('创建对象自动调用此方法')def __lt__(self,other):return self.age<other.agestudent1=Student('zhangsan',19,'0001')
student2=Student('zhangsan',20,'0001')print(student1>student2)
#False
__le__:


判断小于等于

格式与lt方法类似

__eq__:


若没有写eq方法,比较两个对象相等时,返回False,因为自动比较的是内存地址值。

class Student:def __init__(self,name,age,id):self.name=nameself.age=ageself.id=idprint('创建对象自动调用此方法')def __eq__(self,other):return self.name==other.namestudent1=Student('zhangsan',19,'0001')
student2=Student('zhangsn',19,'0001')print(student1==student2)
#False

封装

私有成员命名,在名称前以__开头。

类对象无法访问私有成员

类中的其他成员可以访问私有成员

class Phone:__current_voltage=0def __keep_single_core(self):print('让CPU以单核模式运行')def call_by_5g(self):if self.__current_voltage>=1:print('5g开启')else:self.__keep_single_core()
ph1=Phone()
ph1.call_by_5g()#让CPU以单核模式运行

继承:

继承有单继承和多继承。

多继承注意事项:

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。

即先继承的保留,后继承的覆盖

pass关键字的作用:

占位语句,保证类定义的完整性。

复写父类成员:在子类中重新定义同名的属性或方法即可。

调用父类同名成员:

一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员

若需要使用被复写的父类的成员,需要特殊的方式。

方式一:
使用成员变量:父类名.成员变量

使用成员方法:父类名.成员方法(self)

方式二:

使用super()调用父类成员

使用成员变量:super().成员变量

使用成员方法:super().成员方法

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

class Human:name='zhangsan'nation='China'def fun(self):print(f"{self.name}在{self.nation}诞生")class student(Human):def fun(self):super().fun()print(f"{self.name}在{self.nation}诞生")stu1=student()
stu1.fun()#zhangsan在China诞生
#zhangsan在China诞生

类型注解

主要功能:帮助第三方工具对代码进行类型推断,协助代码作提示。

变量类型注解的两种形式:

1. 变量:类型=值

2.  在注释中,#type:类型

函数的类型注解-形参注解:

def  函数方法名(形参名:类型,形参名:类型.........)->类型:

        pass

前面对传入的形参进行注解,后面为返回值进行注解

Union联合类型:

使用Union可以定义联合类型注解

先导包: from typing import Union

使用:UNion[类型,.......,类型]

from typing import Unionmy_list:list[Union[str,int]]=[1,2,'skcm','uisj']def func(data:Union[int,str])->Union[int,str]:pass

它并不会真正的对类型做验证和判断,类型注解仅仅是提示性的,不是决定性的。

多态:

同一个行为,使用不同的对象获得不同的状态。

class voice:    #抽象类def ani_voice(self):pass#抽象方法class Dog(voice):def ani_voice(self):print('汪汪汪')class Cat(voice):def ani_voice(self):print('喵喵喵')def fun(voi:voice):voi.ani_voice()dog=Dog()
cat=Cat()
fun(dog)
fun(cat)

抽象类(接口):

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

class voice:    #抽象类def ani_voice(self):pass#抽象方法class dog(voice):def ani_voice(self):print('汪汪汪')class cat(voice):def ani_voice(self):print('喵喵喵')

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

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

相关文章

AIGC作答《2024年高考作文|新课标I卷》能拿多少分?

AIGC作答《2024年高考作文&#xff5c;新课标I卷》能拿多少分&#xff1f; 一、前言二、题目三、作答 一、前言 如火如荼的2024年高考圆满落幕&#xff0c;在如此Happy的时刻&#xff0c;AIGC技术正以其前所未有的热度席卷全球。它不仅改变了我们获取信息的方式&#xff0c;也…

Rust-10-数据类型

Rust 标准库中包含一系列被称为 集合&#xff08;collections&#xff09;的非常有用的数据结构。大部分其他数据类型都代表一个特定的值&#xff0c;不过集合可以包含多个值。不同于内建的数组和元组类型&#xff0c;这些集合指向的数据是储存在堆上的&#xff0c;这意味着数据…

【risc-v】arm和riscv有什么关系或者联系?

ARM和RISC-V都是基于精简指令集计算&#xff08;RISC&#xff09;原理的处理器架构&#xff0c;它们在设计理念上有一定的联系&#xff0c;但同时存在一些关键的区别&#xff1a; 设计理念&#xff1a;ARM和RISC-V都采用了RISC的核心设计原则&#xff0c;即通过简化指令集来提高…

C++知识点总结(36):深度优先搜索算法

DFS 一、概念二、典型题目1. 题目2. 分析3. 参考答案 三、变形题目1. 路径数量1.1 审题1.2 思路 2. 走迷宫的过程2.1 审题2.2 参考答案 一、概念 深度优先搜索&#xff08;简称 DFS&#xff09;&#xff0c;其工作原理为不撞南墙不回头&#xff0c;能深则深&#xff0c;不能则退…

Element-UI入门

目录 1.什么是Element-UI 2.作用 3.版本历史 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 6.代码示例 7.未来展望 8.总结 1.什么是Element-UI Element-UI 是由饿了么前端团队开发的一套基于 Vue.js 的桌面端组件库。提供了一整套 UI 组件&#xff0c;使开发者能够快速构…

一步一学!如何通过SOLIDWORKS曲面放样绘制花瓶?

SOLIDWORKS中&#xff0c;我们对放样凸台的操作已经非常熟悉。现在&#xff0c;我们将进一步探索曲面菜单栏中的放样成型功能。 1、绘制草图 首先&#xff0c;同普通放样凸台建模相同&#xff0c;绘制放样轮廓及引导线段。 可通过创建基准面布置轮廓&#xff0c;利用穿透选项将…

AVL许可安全性问题

在数字化时代&#xff0c;软件已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着软件应用的广泛普及&#xff0c;安全性问题也日益凸显。如何保障软件使用安全&#xff0c;防止潜在风险&#xff0c;成为了我们必须关注的重要议题。AVL许可作为软件管理的重要组成…

144、二叉树的前序递归遍历

题解&#xff1a; 递归书写三要素&#xff1a; 1&#xff09;确定递归函数的参数和返回值。要确定每次递归所要用到的参数以及需要返回的值 2&#xff09;确定终止条件。操作系统也是用栈的方式实现递归&#xff0c;那么如果不写终止条件或者终止条件写的不对&#xff0c;都…

Android 各个版本名称和特性总结(持续更新)

我们就从Android 5.0开始吧&#xff0c;因为从写文时起&#xff0c;大部分手机都到5.0了。 目录 Android5.0 &#xff08;Lollipop 棒棒糖&#xff09;新特性 Android6.0新特性 Android7.0新特性 Android8.0(O)新特性 Android9.0新特性 Android10.0(Q)新特性 Android11…

定位器追踪器怎么连接手机

定位器追踪器连接手机的方法主要取决于追踪器的类型和功能。下面将列举一些常见的方式来说明如何将定位器追踪器与手机连接&#xff1a; 蓝牙连接 检查设备兼容性&#xff1a;确保你的定位器追踪器支持蓝牙功能&#xff0c;同时手机的蓝牙也已开启。进行配对&#xff1a;在手机…

前端调用接口有参数正常显示返回值,但是打印是undefined

前端调用接口有参数正常显示返回值&#xff0c;但是打印是undefined 这种有几种情况&#xff0c;但总的来说是因为我们做了接口拦截器的处理 一、后端返回code值有误 比如新来的后端忘记传code了。&#xff08;按照公司规范&#xff0c;一般都是200成功码&#xff09; 或者网上…

java程序100道21-30

21.定义一个接口A&#xff0c;有一个String的常量值为Java的 s&#xff0c;有void 的print()方法和String 的getInfo()方法&#xff0c;类X是A的实现类&#xff0c;类A的print()方法输出常量s,方法getInfo()返回“Hello!!!” package Exercises.One_Hundred.Demo21; ​ public…

IO-源码阅读 glibc 2.35

文章目录 参考缓存机制IO_FILE_PLUSfopenfopen_internal_IO_no_init_IO_old_init _IO_new_file_init_internal_IO_link_in _IO_new_file_fopen_IO_file_open fread_IO_fread_IO_sgetn_IO_doallocbuf_IO_file_doallocate_IO_file_stat_IO_setb __underflow_IO_new_file_underflo…

[Cloud Networking] Layer 2

文章目录 1. 什么是Mac Address?2. 如何查找MAC地址&#xff1f;3. 二层数据交换4. [Layer 2 Protocol](https://blog.csdn.net/settingsun1225/article/details/139552315) 1. 什么是Mac Address? MAC 地址是计算机的唯一48位硬件编码&#xff0c;嵌入到网卡中。 MAC地址也…

英特尔:AI落地,未来已来

引言 随着AI技术的发展和大模型的普及&#xff0c;人工智能正在逐渐渗透到我们的日常生活中。2023年5月底&#xff0c;我参加了台北的英特尔技术展&#xff0c;深入了解了英特尔在AI个人电脑领域的最新进展。本文将详细介绍英特尔的新一代移动处理器Lunar Lake&#xff0c;以及…

Spring Data Jpa 实现批量插入或更新

1. BatchConsumer package com.demo.common.hibernate.batch;import com.demo.common.hibernate.querydsl.QueryParameterBuilder;/*** 批量数据消费者接口&#xff0c;用于设置 SQL 参数并执行操作。** param <T> 记录类型的泛型* author xm.z*/ FunctionalInterface p…

02 Linux 调试手段

1、printk 与打印等级 在 Linux 内核中,内核开发者喜欢 printk 来调试,它与 C 库的 printf() 函数类似。 printk() 与 printf() 区别:printk() 提供输出等级。内核会根据这个等级来判断是否在终端或者串口中输出 log。 1)printk 等级 #define KERN_EMERG KERN_SOH &quo…

主成分分析学习

8 主成分分析 | 多元统计分析讲义 (pku.edu.cn) 清风数学建模学习笔记——主成分分析(PCA)原理详解及案例分析_x10为生均教育经费对以上指标数据做主成分分析&#xff0c;并提取主成分-CSDN博客 PCA&#xff08;主成分分析&#xff09;-------原理&#xff0c;推导&#xff0…

LabVIEW 与组态软件在自动化系统中的应用比较与选择

LabVIEW 确实在非标单机设备、测试和测量系统中有着广泛的应用&#xff0c;特别是在科研、教育、实验室和小型自动化设备中表现突出。然而&#xff0c;LabVIEW 也具备一定的扩展能力&#xff0c;可以用于更复杂和大型的自动化系统。以下是对 LabVIEW 与组态软件在不同应用场景中…

【C++】——Stack与Queue(含优先队列(详细解读)

前言 之前数据结构中是栈和队列&#xff0c;我们分别用的顺序表和链表去实现的&#xff0c;但是对于这里的栈和队列来说&#xff0c;他们是一种容器&#xff0c;更准确来说是一种容器适配器 ✨什么是容器适配器&#xff1f; 从他们的模板参数可以看出&#xff0c;第二个参数模…