当前位置: 首页 > news >正文

python、类

目录

1. 类、实例

2. 类变量和实例变量

3. 类方法和实例方法

区分

4. 魔术方法(magic methods)

5. 自定义容器(custom containers)

6. 私有变量:在变量名前加两个下划线__

7. 装饰器property (属性)

8. 继承inheritance

1)方法重写

2)多重继承(multiple inheritance):一个类同时继承多个父类

3)抽象类(作为接口)

9. 多态(Polymorphism)

以前端举例:

10. Extending Built-in Types

11. data class(没有任何方法,只有数据的类)


1. 类、实例

命名:驼峰命名法,首字母大写,不使用_连接。例如MyPoint

class: blueprint for creating new objects,like human

object: instance of a class, like john,mary

2. 类变量和实例变量

attribute(实例变量): variable defined inside a class

类变量:被所有实例共享

image-20250721171022720

image-20250721171319875

实例中改变类变量的值,不会影响到其他实例变量

3. 类方法和实例方法

定义类方法需要装饰器decorator,类方法可以作为出厂设置来定义特定的实例对象。

cls为class的缩写

image-20250721173151924

image-20250721173204366

区分

  • 用类方法:需要操作类属性,或在继承中动态处理子类。

  • 用静态方法:代码逻辑属于类但不需要访问类或实例状态。

  • 用实例方法:需要操作实例属性(默认情况)

4. 魔术方法(magic methods)

即开头和结尾有下划线的方法,由python解释器自动调用

python 3 magic methods

Python3中的魔术方法汇总_python magic-CSDN博客

例如__ str__(): 将对象转换为字符串时,调用此函数。

没有__ str__()方法时,输出print(point),返回的时类的名称与地址

image-20250721175202607

有__ str__()方法后,输出类:

image-20250721175315430

image-20250721175341760

__ eq__():定义==

没有该函数时,==对比的是两个对象的地址

有该函数:

image-20250721201136464

image-20250721201145932

__ gt__(): 定义>;重载该函数后,python自动定义lt()即<

__ add__(): 定义+

image-20250721202126240

5. 自定义容器(custom containers)

image-20250721210320342

image-20250721210334752

6. 私有变量:在变量名前加两个下划线__

私有变量只能在类的内部访问,外部或子类无法直接访问。

私有变量并非绝对安全,当将tags设置为私有变量后,python自动将其重命名,因此根据名称改写规则通过新变量名仍然可以访问该变量。

image-20250721212010716

image-20250721212036085

image-20250721212102132

7. 装饰器property (属性)

判断设定的变量值是否合理。

常规实现方法:

若要判断设定的变量值是否正确,可将该属性设置为私有变量,建立两个方法来设置和获取变量值。设置时进行判断,判断成功后设置私有变量的值,获取时在类内部返回私有变量的值。

使用product.price.set_price和product.price.get_price来设置和获取变量

image-20250721213150945

python精简实现方法:

propertyPython 提供的一种装饰器用于将类的方法转换为属性访问的形式。它可以让我们在访问属性时,隐式调用方法,从而实现对属性的控制和预处理。(可以想象为有线耳机与蓝牙耳机,装饰器将调用方法隐藏了,如同蓝牙耳机将线隐藏了)

image-20250724233828081

image-20250724235957089

使用product.price = ?和product.price来设置和获取变量

但这并不能隐藏set_price和get_price两个方法。我们可以选择在这两个方面面前放上@classmethod,将其作为类方法,以此来隐藏掉。

但更简单的方法是直接在方法前放上装饰器property,如下所示:

image-20250725000313911

只需这样,就可以在设置变量时同时判断其是否合理,且调用方式与普通变量相同。

8. 继承inheritance

继承或组合:防止代码中的重复冗余

使用情况:仅一两个级别时适用。使用中应避免多级继承(multi-level inheritance)的问题。

在父类中定义公共行为或公共方法。所有类都继承了object类。

image-20250726152826324

判断是否为类的实例和类的子类

image-20250726171319604

1)方法重写

重写父类的方法,若重写init方法,则父类的init不再执行。

要想执行父类的init方法,则应执行super().__ init__()

image-20250726171948659

2)多重继承(multiple inheritance):一个类同时继承多个父类

image-20250726173023535

适用情况:

继承的父类之间没有任何共同之处

例如:Flyer,Swimmer -> FlyingFish

3)抽象类(作为接口)

两个类有相似之处时,可以将一个抽象类作为它们的父类,该父类类似为一个半成品。

抽象类中的方法可用abstractmethod来装饰,抽象类不可以被实例化。

继承抽象类后,需重写被abstractmethod装饰的方法

image-20250727210526603

image-20250727210601587

9. 多态(Polymorphism)

多态意味着很多形式,即many forms

以前端举例:

文本框和下拉列表都继承于ui控件,同名的draw却有不同的功能,这就是多态。

image-20250727212210486

image-20250727212239741

注:python的一种动态类型的语言,他不检查对象的类型。如上文中的draw方法,传递进来的control只要有draw方法,python就很乐意接受。

10. Extending Built-in Types

对内置类型使用继承

image-20250727214520877

11. data class(没有任何方法,只有数据的类)

namedtuple:创建一个自定义的元组对象。这个对象不仅具有元组的不可变性,还可以通过属性名而不是索引来访问,使得代码更加清晰。

http://www.dtcms.com/a/392281.html

相关文章:

  • NumPy高级技巧:向量化、广播与einsum的高效使用
  • GD32VW553-IOT 基于 vscode 的 msdk 移植(基于Cmake)
  • Filter 过滤器详解与使用指南
  • 养成合成小游戏抖音快手微信小程序看广告流量主开源
  • 在 Ubuntu 系统下安装 Conda
  • ac8257 android 9 SYSTEM_LAST_KMSG
  • ARM 架构与嵌入式系统
  • ARM(14) - LCD(1)清屏和画图形
  • Linux第十九讲:传输层协议UDP
  • 计算机网络学习(四、网络层)
  • 开启科学计算之旅:《MATLAB程序设计》课程导览
  • MATLAB | 数学模型 | 传染病 SIR 模型的参数确定
  • MATLAB基本运算(2)
  • 小红书数据分析面试题及参考答案
  • SpringCloudStream:消息驱动组件
  • ret2text-CTFHub技能树
  • VirtualBox 7 虚拟机的硬盘如何扩大?
  • React新闻发布系统 权限列表开发
  • 23种设计模式之【策略模式】-核心原理与 Java 实践
  • 前端实战从零构建响应式井字棋游戏
  • Java中的equals()与hashCode()
  • 【绕过open_basedir】
  • 如何用户细分
  • 福彩双色球第2025109期篮球号码分析
  • 思考:客户端负载均衡和服务器负载均衡有什么区别?
  • 网络编程day04/05原始套接字
  • Yarn命令与npm命令的区别与联系(npm:Node.js的官方包管理工具;Yarn:Facebook开发的JavaScript包管理工具)
  • 【大语言模型 67】梯度压缩与稀疏通信
  • LeetCode第365题_水壶问题
  • OpenCV:DNN 模块实现图像风格迁移