python类中方法的执行顺序-Python中实例化class的执行顺序示例详解
前言
本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧
Python里对类的实例化时有怎样的顺序
一般来说一个类里面有类变量和方法,比如我们定义一个名为A的类
1
2
3
4
5
class A():
bar= "my lover love me"
def __init__(self, name):
print('A的class' ,self.__class__, name)
我们在这个类里面定义了一个类变量bar和一个构造方法__init__,那么我们实例化A()时都发生了什么呢!看官不要急,听我慢慢道来...
首先,python 调用内置的type类,没有听错,就是我们平时用来测引用类型的那个type,然后type调用内置的元类mateClass,mateClass再调用__new__方法将类实例化,此时完成了第一步
然后,这个实例将会初始化自己的类变量,就是把自己从头到尾扫视一遍,
之后,进入构造方法,并初始化自己的实例变量。
注意:python中类变量和实例变量是不一样的,
类变量:不用实例化也可以访问。
实例变量:是动态创建的。必须实例化之后才可以访问,因为之前是不存在的。
比如下面这个例子:不实例化访问类变量
1
2
3
class A():
a= 2
print(A.a)
输出:
>>>2
说了这么多,上代码。看看类继承时怎么运行的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A():
def __init__(self, name):
print('A的class' ,self.__class__, name)
class B(A):
def __init__(self, name):
self._name= name
A.__init__(self, name)
print('B的class',self.__class__, name)
print('this is B class')
class C(B):
def __init__(self, name):
B.__init__(self, name)
print('C的class')
if __name__== '__main__':
c= C('lee')
输出如下:
this is B class
A class lee
B class lee
C class
来现身说法,解释一波
首先对class C()进行实例化,从头到尾扫一遍,然后进入C()的构造,遇到了父类C()的构造方法B.__init__ 。
进入class B(),从头到尾扫一遍,执行了print('this is B class')语句然后进入B()的构造,遇到了父类B()的构造方法A.__init__。
进入class A(),从头到尾扫一遍,然后进入A()的构造方法A.__init__。然后A.__init__执行完毕并弹出栈,class A()执行完毕并弹出栈。
回到class B(),从上次未执行完的地方print('B的class', self.__class__, name)继续执行。然后B.__init__执行完毕并弹出栈,class B()执行完毕并弹出栈。
回到class C(),从上次未执行完的地方print('C的class')继续执行。然后C.__init__执行完毕并弹出栈,class C()执行完毕并弹出栈。程序运行完毕。
由于是对class C()进行实例化,上面的self都是指class C()的实例而不是class A()的或者class B()的。因此self.__class__清一色的显示而不是或 。
随便补充一下使用type关键字动态创建类的知识点,敲黑板、、、我要用CET3.5的英语水平向大家翻译一部分官方文档对type的描述啦。
使用三个参数,返回一个新类型对象。这实际上是类语句的动态形式。名称字符串是类名,并成为__name__属性;基元元组列出基类并成为>__bases__属性;并且dict字典是包含类主体定义的命名空间,并被复制到标准字典以成为__dict__属性。
怎么样,是不是很拗口,是不是大写的懵*。so,上代码,以下两种写法输出一样的都是输出:重写name方法 1
1
2
3
4
5
6
class X():
a= 1
def __name__(self):
return '重写name方法'
x=X()
print(x.__name__(), x.a)
1
2
3
X= type('重写name方法', (object,),dict(a= 1))
x= X()
print(X.__name__, x.a)
type动态创建实例化时,第一个参数就相当于重写了类的__name__方法。X类但__name__属性却不叫X,呵,好反人类的写法
还好我们一般不是这么变态,通常我们会将这两个定义成相同的名字,如下:都叫X
X = type('X', (object,), dict(a = 1))
python类中方法的执行顺序-Python中实例化class的执行顺序示例详解相关推荐
- python实例化是什么意思_Python中实例化class的执行顺序示例详解
前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...
- python类的方法中定义函数
代码: class A():def run(self):def p():print('hello')p()a = A() a.run() 输出: hello 注意类中方法和普通函数的区别,python ...
- python中3or5什么意思_示例详解Python3 or Python2 两者之间的差异
每门编程语言在发布更新之后,主要版本之间都会发生很大的变化. 在本文中,Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异,以帮助说明语言的变化. 本 ...
- python中import re_Python3中正则模块re.compile、re.match及re.search函数用法详解
本文实例讲述了Python3中正则模块re.compile.re.match及re.search函数用法.分享给大家供大家参考,具体如下: re模块 re.compile.re.match. re.s ...
- python bisect_Python中bisect的用法及示例详解
bisect是python内置模块,用于有序序列的插入和查找. 查找: bisect(array, item) 插入: insort(array,item) 查找 import bisect a = ...
- [Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解
扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...
- Python爬虫之爬取淘女郎照片示例详解
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.op-kg.com/ ...
- go语言字符串换行_Go语言中的字符串处理方法示例详解
1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号(" ...
- python的用途实例-python assert的用处示例详解
使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...
最新文章
- 如何在Storyboard中使用Scroll view
- 一个简单的记事本程序
- 做事情一定要从小事情着手
- 推荐几个实用的Python“小伎俩”
- 51nod 1222 最小公倍数计数【莫比乌斯反演】
- android进程 系统启动过程 android boot sequence
- extern “C”
- docker中启动关闭删除所有的容器命令
- 四月份面试题汇总(一)
- java监控文件内容变化_Java使用WatchService监控文件内容变化的示例
- docker(4):coreos+docker+rancher真厉害
- PBOC规范研究之四、文件结构及访问(转)
- 单区域——OSPF 讲解+配置命令(为了做双机热备实验)
- 马尔可夫链、隐马尔科夫模型、贝叶斯网络、因子图
- 学计算机的要起一个群名,如何起一个代表青春的群名字
- 张锋因何错过诺贝尔化学奖?
- Unraid USB启动盘怎么更换和重新获取注册码密钥?
- 《公安机关办理刑事案件电子数据取证规则》
- 仿京东手机端地址选择四级地址选择
- 专访闪能申论凌青:学会申论应试五大力,轻松碾压对手
热门文章
- 从 Eclipse 迁移至 Android Studio
- Last-Modified、If-Modified-Since 实现缓存和 OutputCache 的区别
- 并发和在线用户数的思考
- 极其好用好学的规则引擎 - A2D规则引擎
- KRSReader酷狗音乐歌词写真图片提取工具(提取KRS文件中的图片)
- NYOJ 453 小珂的烦恼 模拟
- 电影网网站优化-SEO篇
- 关于python语言、下列说法不正确的是-下列语句中,___________是不正确的Python语句...
- python使用教程pandas-python使用pandas处理excel的方法
- python画折线图详解-Python数据可视化(一) 绘制折线图和散点图