Python 类

news2025/1/19 11:16:01

文章目录

  • 定义
  • 类与对象
  • 成员方法
  • 构造方法
  • 魔术方法
  • 私有成员
  • 继承
    • 复写父类成员
    • 调用父类成员
  • 多态

定义

class 类名:
	成员变量
	成员方法

变量=类名()# 创建对象
变量.成员变量# 使用成员变量
变量.成员方法

类与对象

类相当于设计图纸,规定了各种属性与行为。
对象也就是按照类所实现的实例,对象完成具体的工作。

成员方法

语法:参数列表中有一个self关键字,是必须填写的。用于表示类对象自身
在方法内部,若要访问成员变量与调用成员函数,则需要通过self来访问
在调用成员方法时,self由python自动传入,不用手动传入。

def 方法名(self,参数1...):
	方法体

构造方法

构造对象时,会自动调用。类会默认存在一个无参的构造函数。
注意:若实现了构造函数,则默认的无参构造函数将不存在。
前后为两个下划线。

def __init__(self,参数):
	方法体

魔术方法

定义:python类内置的方法,如__init__
常用的魔术方法:
在这里插入图片描述

__str__字符串方法:控制类转换为字符串的行为。
在不使用__str__时,print(类对象)输出的是该对象的内存地址

class Example:
	x=None
	y=None
	def __init(self,x,y):
		self.x=x
		self.y=y
	def __str__(self):# 控制类转换为字符串的行为
		return f"x={self.x}, y={self.y}"
ex=Example(1,2)
print(ex)# 输出 x=1, y=2
print(str(ex))

lt 小于符号比较方法:控制类之间比较大小的行为,类似C++中重载<与>运算符
实现了__it__方法,即可同时完成:小于符号与大于符号

class Example:
	x=None
	y=None
	def __init__(self,x,y):
		self.x=x
		self.y=y
	def __lt__(self,other):# 控制小于符合,other为右边的类对象
		return self.x<other.x# 按照x的大小
ex1=Example(1,2)
ex2=Example(2,3)
print(ex1<ex2)# True
print(ex1>ex2)# False 大于号也可以

le 小于等于比较符号方法,可用于<=, >=。类似C++中重载<=与>=

class Example:
	x=None
	y=None
	def __init__(self,x,y):
		self.x=x
		self.y=y
	def __le__(self,other):# 控制小于等于符号,other为右边的类对象
		return self.x <= other.x# 按照x的大小
ex1=Example(1,2)
ex2=Example(2,3)
print(ex1<=ex2)# True
print(ex1>=ex2)# False 大于等于比较符号

eq 等于运算符方法,用于 ==,类似C++中重载 ==。
若没有__eq__方法,则==比较的是两个类对象的内存地址是否相同

class Example:
	x=None
	y=None
	def __init__(self,x,y):
		self.x=x
		self.y=y
	def __eq__(self,other):# 控制等于符号,other为右边的类对象
		return self.x==other.x# 按照x的大小
ex1=Example(2,2)
ex2=Example(2,3)
print(ex1==ex2)# True

私有成员

在成员变量或成员方法前面增加两个下划线即可。私有成员可以被类内的其他成员访问,注意调用时不要漏了下划线。

class Example:
	__x=None # 私有成员变量
	def __setX(self,x):# 私有成员方法
		self.__x=x
	def getX(self,x):
		self.__setX(x)
		return self.__x

ex=Example()
# ex.__x # 报错
# ex.__setX(x) # 报错
ex.getX(x)

继承

class 子类名(父类名1,父类名2...)
	类体

若多个父类中,存在同名的成员,则优先从左到右递减,先继承的保留,后继承的被覆盖。

class Shape:
	x=None
	y=None
	def __init__(self,x,y):
		self.x=x
		self.y=y

class Circle(Shape):
	R=None
	def __init__(self,x,y,R):
		self.x=x
		self.y=y
		self.R=R		

复写父类成员

在子类定义同名的成员变量或成员方法即可

调用父类成员

有两种方法:
① 使用父类名:
父类名.成员变量或成员方法**(self)** # 注意要传入self

② 使用super()调用
super().成员变量或成员方法() # 注意不要传入self

class Shape:
	x=0
	y=0
	def __init__(self,x,y):
		self.x=x
		self.y=y
	def getPlace(self):
         return self.x,self.y
		
class Circle(Shape):
	R=0
	def __init__(self,x,y,R):
		super().__init__(x,y)# 调用父类构造函数
		self.R=R
	def getPlace(self):# 重写父类方法
		print(self.name,Shape.name)# 调用父类的成员变量
		return Shape.getPlace(self)# 调用父类方法

多态

使用不同的对象时,会得到不同的状态。
多态经常在继承中使用,使用父类对象来控制子类对象,在C++中有更加严格的使用。
如:
函数中的形参注解为父类,调用时传入子类对象。根据传入对象的子类不同,执行不同的操作。

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("汪")
        
class Cat(Animal):
    def speak(self):
        print("喵")
        
def F(animal: Animal):  # 多态,animal注解为父类
    animal.speak()  # 根据传入对象所属的子类来执行对应子类中的方法
    
animal1 = Dog()
animal2 = Cat()
F(animal1)# 传入子类对象
F(animal2)

抽象方法:
方法体为空实现(pass)的方法,如Animal中的speak方法。
子类必须重写父类中的抽象方法,不然对于子类来说,抽象方法等于不存在。

抽象类(接口):
包含抽象方法的类。
用于顶层设计(设计标准),便于子类的实现。
对子类的一种软性约束

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

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

相关文章

STM32之四:TIM定时器(1-基本定时器)

目录 1. STM32有哪些定时器 2. 基本定时器 2.1 基本定时器主要功能 2.2 基本定时器的框图 2.2.1 时钟输入 2.2.2 至DAC 2.2.3 至时基单元&#xff08;重点&#xff09; 2.2.4 影子寄存器 2.2.5 基本定时器寄存器说明 2.2.5.1 控制寄存器1&#xff08;TIMx_CR1&#x…

零刻SER8 8845HS设置RAID磁盘阵列教程

SER8内置两个NVme硬盘位&#xff0c;支持硬盘RAID功能&#xff0c;目前支持以下几种RAID模式。 Volume&#xff08;卷&#xff09;&#xff1a;将多块硬盘拼接成一个大硬盘&#xff0c;也称为JBOD&#xff08;Just a Bunch Of Disks&#xff09;。它不要求硬盘容量相同&#xf…

设计模式 - 桥接模式,就要这样学!

目录 开始 为什么引入桥接模式 桥接模式概述 桥接模式实现 桥接模式的扩展性 开始 为什么引入桥接模式 问题&#xff1a;针对 不同品牌 的 不同类型手机 实现 open、close、call 操作. 如果将来新增一个手机类型&#xff0c;例如 IPhone&#xff0c;就需要继续写对应的三…

项目如何整合sentinel

1、添加依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifact…

嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间

目录 1 进程时间概念 2 times 函数 2.1 times 函数介绍 2.2 示例程序 3 clock 函数 3.1 clock 函数介绍 3.2 示例程序 1 进程时间概念 进程时间指的是进程从创建后&#xff08;也就是程序运行后&#xff09;到目前为止这段时间内使用 CPU 资源的时间总数&#xff0c;出…

音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

【Apache Doris】周FAQ集锦:第 9 期

【Apache Doris】周FAQ集锦&#xff1a;第 9 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

2024 InForSec@BCS网络空间安全国际学术研究交流会,同探网安技术创新与应用前沿

6月6日&#xff0c;2024年InForSecBCS网络空间安全国际学术研究交流会在北京国家会议中心成功举办&#xff0c;线上线下近千人参加了本次研讨会。 本次学术研究交流会主题为“网络安全技术创新与应用前沿”&#xff0c;邀请了国内从事人工智能安全、互联网基础设施安全、电磁安…

APP逆向 day7 JAVA基础2

一.前言 昨天我们讲了点java基础&#xff0c;大家是不是觉得就特别简单&#xff0c;今天讲点稍微难一丢丢的基础&#xff0c;也就是java基础2.0&#xff0c;今天我要和大家说的内容十分的重要&#xff0c;直接关乎到下一节的内容&#xff0c;所以&#xff0c;好好学&#xff0…

Python基础小知识问答系列-随机数相关

1. 问题&#xff1a; 如何生成x-y之间的随机整数&#xff1f; 如何生成0-1之间的随机浮点数&#xff1f; 如何生成x-y之间的随机浮点数&#xff1f; 如何从列表中随机获取一个元素&#xff1f; 如何从列表中随机获取多个元素&#xff1f; 如…

VQVAE:Neural Discrete Representation Learning

论文名称&#xff1a;Neural Discrete Representation Learning 开源地址 发表时间&#xff1a;NIPS2017 作者及组织&#xff1a;Aaron van den Oord,Oriol Vinyals和Koray Kavukcuoglu, 来自DeepMind。 1、VAE 简单回顾下VAE的损失函数&#xff0c;ELBO的下界为&#xff1a; …

qt for android 使用打包sqlite数据库文件方法

1.在使用sqlite数据库时&#xff0c;先将数据库文件打包&#xff0c;放置在assets中如下图: 将文件放置下android中的assets下的所有文件都会打包在APK中&#xff0c;可以用7zip查看apk文件 2.在qt代码读取数据文件&#xff0c;注意在assets下的文件都是Read-Only&#xff0c;需…

初阶数据结构之堆讲解

本篇文章带大家学习的是堆&#xff0c;还请各位观众老爷给个三连 正片开始 堆的概念 如果有一个关键码的集合 K { &#xff0c; &#xff0c; &#xff0c; … &#xff0c; } &#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满…

HarmonyOS开发实战:加密类组件使用方法-API

加密类组件 模块介绍RSA提RSA供生成密钥加解密验签等系列方法(基于HarmonyOS API)AES提供AES生成密钥加解密等系列方法(基于HarmonyOS API)DES提供3DES生成密钥加解密等系列方法(基于HarmonyOS API)SM2提供SM2生成密钥加解密等系列方法(基于HarmonyOS API)SM3提供SM3生成摘要,…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

类似李跳跳的软件有什么,强烈推荐所有安卓手机安装!!!

今天阿星分享一款让安卓手机更顺滑的神器——智慧岛。你问我李跳跳&#xff1f;由于大家都知道的原因&#xff0c;那是个曾经让广告无处遁形的神兵利器&#xff0c;可惜现在它已经退休了。不过别担心&#xff0c;智慧岛接过了接力棒&#xff0c;继续为我们的安卓体验保驾护航。…

爱情再启:庄国栋笑谈“玫瑰人生”爱情觉悟

庄国栋&#xff0c;这位电视剧《玫瑰的故事》中的男主角&#xff0c; 最近在一次采访中坦言&#xff1a;“如果给我一次重来的机会&#xff0c; 我绝对会毫不犹豫地选择爱情&#xff01;” 听到这话&#xff0c; 我不禁想&#xff0c;庄先生&#xff0c;您是不是被剧里的玫瑰…

42.HOOK引擎核心代码

上一个内容&#xff1a;41.HOOK引擎设计原理 以 40.设计HOOK引擎的好处 它的代码为基础进行修改 主要做的是读写寄存器 效果图 添加一个类 htdHook.h文件中的实现 #pragma once class htdHook { public:htdHook(); };htdHook.cpp文件中的实现&#xff1a; #include "…

Java并发编程基础知识点

目录 Java并发编程基础知识点1、线程&#xff0c;进程概念及二者的关系进程相关概念线程相关概念进程与线程的关系补充小知识点&#xff1a; 2、线程的状态Java线程的状态&#xff1a;Java线程不同状态之间的切换图示 3、Java程序中如何创建线程&#xff1f;①、继承Thread类②…

深入解析Java和Go语言中String与byte数组的转换原理

1.Java String与byte[]互相转换存在的问题 java中&#xff0c;按照byte[] 》string 》byte[]的流程转换后&#xff0c;byte数据与最初的byte不一致。 多说无益&#xff0c;上代码&#xff0c;本地macos机器执行&#xff0c;统一使用的UTF-8编码。 import java.nio.charset.S…