IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python——经典类与新式类,静态方法、类方法与实例方法详解! -> 正文阅读

[Python知识库]Python——经典类与新式类,静态方法、类方法与实例方法详解!

创作不易,来了的客官点点关注,收藏,订阅一键三连?😜?

前言

“人生苦短,我用python”,我是一个即将毕业的大学生,超超。如果你也爱python,不妨跟着萌新超超一起学习python,拿下python,一起加油,共同努力,拿到理想offer!


系列文章目录

Python——什么是面向对象?类的定义、self和继承详解

Python——函数大全及使用方法! lambda?global?

Python——流程控制,pass?break?continue?这些你弄清楚了吗?


总结

本期内容是python面向对象专题第二期,主要介绍python中的经典类与新式类,以及实例方法、静态方法与类方法,通过本期内容,你将指导经典类与新式类的区别、C3算法,以及实例方法,静态方法,类方法的三种使用和区别?

目录

经典类与新式类

经典类与新式类在类型上的区别

经典类与新式类的继承原理与顺序

实例方法、静态方法与类方法

属性:对象描述的信息

三种方法

各种方法的区别(@staticmethod、@classmethod)

总结

属性包装与应用(@propert)


经典类与新式类

经典类与新式类在类型上的区别

经典类

所有的类都是classobj类型,而类的实例都是instance类型

类与实例只有通过__class__属性进行关联

>>> class B: pass

...

>>> b = B()

>>> type(b)

<type 'instance'>

新式类

类实例的类型是这个实例所创建自的类(通常是和类实例的__class__相同

>>> class A: pass

...

>>> a = A()

>>> type(a)

<class '__main__.A'>

>>>

经典类与新式类的继承原理与顺序

python继承算法的发展

? Python2.2以前的版本:经典类(classic class)时代

? MRO的方法为DFS(深度优先搜索(子节点顺序:从左到右))

? Python2.2版本:新式类(new-style class)诞生,这时有两种MRO的方法

? 经典类MRO为DFS(深度优先搜索(子节点顺序:从左到右))

? 新式类MRO为BFS(广度优先搜索(子节点顺序:从左到右))

? Python2.3到Python2.7:经典类、新式类和平发展

? 从Python2.3开始新式类的MRO取而代之的是C3算法

? Python3到至今:新式类一统江湖

? Python3开始就只存在新式类了,采用的MRO也依旧是C3算法

C3算法

首先将自身类加入本序列,然后堆积成旭烈的元素依次判断

若某元素不在其他序列或者它是所有继承序列的第一个,那么把这个元素提取到本序列

经典类与新式类的继承继承原理

? MRO(Method Resolution Order):方法解析顺序

? MRO是在Python类的多重继承中,解决当定义了多个同名的方法/属性时,为避免产生歧义,保证

用户找到正确的对象所实现的一种算法。

? 对于你定义的每一个类,Python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表


实例方法、静态方法与类方法

属性:对象描述的信息

静态属性 --> 类属性

普通属性 --> 实例属性

三种方法

? 实例(普通)方法(使用实例中的数据)--> 给实例使用(一定要传递一个实例,由实例调用)

? 静态方法(无需使用实例封装的内容@staticmethod)

? 类方法(会自动加当前类的类名 @classmethod) => cls表示类本身

class A:

??? name = "ATM"



??? def __init__(self):

??????? self.country = "China"



??? # 普通方法(实例方法):第一个参数代表实例本身

??? def narmal_method(self,name):

??????? print("normal:")

??????? print(self.name,name)



?? ?# 类方法:第一个参数代表类

??? @classmethod

??? def class_method(cls,name):

??????? print("classmethod:")

??????? print(cls)



??? # 静态方法

??? @staticmethod

??? def static_method(name):

??????? print("staticmethod:")





a1 = A()



# 实例方法,静态方法,类方法都能通过实例去调用



a1.narmal_method("a1")

# 输出结果

normal:

ATM a1



a1.class_method("a1")

# 输出结果

classmethod:

<class '__main__.A'>



a1.static_method("a1")

# 输出结果

staticmethod:



# 类可以通过类名调用类方法和静态方法,类调用实例方法必须传入一个实例对象



A.narmal_method(a1,"A")

# 输出结果

normal:

ATM A



A.class_method("A")

# 输出结果

classmethod:

<class '__main__.A'>



A.static_method("A")

# 输出结果

staticmethod:

各种方法的区别(@staticmethod、@classmethod)

? 实例方法不能通过类名调用,但是静态方法和类方法是可以(不实例化访问)

? 实例方法:可以通过self访问实例属性

? 类方法:可以通过cls访问类属性(希望取的值不受实例影响时使用)

? 静态方法:不可以访问,通过传值的方式

总结

1.实例方法

? 只能通过实例对象调用,类对象调用的话,需要传递实例作为参数

? 实例方法内部通过 self.属性名 去访问实例属性和类属性

? 使用对象调用实例方法时,第1个参数可以不用传,就代表实例本身

2.类方法

? 可以通过实例调用,也可以通过类去调用,第1个参数代表类本身,可以不用传

? 可以使用 cls.属性名 去访问类属性

? 前面要装饰器#classmethod

3.静态方法

? 可以通过实例对象、类名去调用,但是每个参数都必须必须传递

? 方法的内部访问属性,通过 类名.属性名 去访问类属性

? 前面要加装饰器@staticmethod

__init__是实例方法,__new__是静态方法

属性包装与应用(@propert)

? 把函数包装成属性,使用的时候用对象名.属性名

? Person类中有一个属性为age,控制age的范围只能在0~150之间

属性包装的应用

? property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检

查,这样,程序运行时就减少了出错的可能性。

创作不易,客官点个赞吧!评论一下!一起加油?😜

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:02:32  更:2021-08-29 09:03:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:23:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码