what668668 发表于 2020-5-13 20:05:57

666

Hello. 发表于 2020-5-15 06:09:20

哎呦,恭喜加精{:10_275:}

hrp 发表于 2020-5-15 07:59:59

这就厉害了

大风包子 发表于 2020-5-15 08:58:40

看看

Pythonnewers 发表于 2020-5-15 09:22:06

类这里小甲鱼没看懂.java也没看懂,算了算了{:10_269:}

sunrise085 发表于 2020-5-15 09:49:57

Pythonnewers 发表于 2020-5-15 09:22
类这里小甲鱼没看懂.java也没看懂,算了算了

你多大了?
可能是你太年轻了,还没有办法理解这种抽象的概念吧。
不要把类想象的有多么神秘。
你就想像着,世间万物都是按照各种规则分类的,符合同一种规则的就属于一类。
比如说,三角形,就是一类图形,这种图形是一种平面图形,有三条边,三个顶点,这些是共性,凡是有三个顶点三条边的平面图形就称之为三角形。

其实小学就开始学习归类了,比如小学会有分类题目,将一些图形分类,哪些是三角形,哪些是正方形,哪些是平行四边形。
只是那时候看到的都是很浅显的东西,都是实实在在存在的东西。如今把归类抽象化了。需要发挥有点想象力。

其实在编程中开始接触类的时候,也是哪一些简单的进行举例的,比如说,编程中经常举的例子,学生类,这个类有什么属性呢,学号、姓名、班级、性别、成绩等等

Pythonnewers 发表于 2020-5-15 10:07:09

sunrise085 发表于 2020-5-15 09:49
你多大了?
可能是你太年轻了,还没有办法理解这种抽象的概念吧。
不要把类想象的有多么神秘。


是的,我还小{:10_269:}
最主要我写的代码太少了,甚至可以直接推翻重做,分类我几乎用不到{:10_269:}

zwhe 发表于 2020-5-30 10:46:27

{:5_91:}

straightup 发表于 2020-6-3 20:22:36



楼主你好 ,我想问下class F中是 super(G,self).__init__(),那 按__mro__() 列表中G的位置之后的执行,应该是到D呀,为什么F就到E了呢

sunrise085 发表于 2020-6-3 20:32:06

straightup 发表于 2020-6-3 20:22
楼主你好 ,我想问下class F中是 super(G,self).__init__(),那 按__mro__() 列表中G的位置之后的执行 ...

仔细看看程序
super(G,self).__init__()被注释掉了呢~
执行的是super().__init__()

straightup 发表于 2020-6-3 21:52:36

sunrise085 发表于 2020-6-3 20:32
仔细看看程序
super(G,self).__init__()被注释掉了呢~
执行的是super().__init__()

啊这,太粗心了。那就没问题了{:10_282:}

zpm 发表于 2020-7-6 11:04:50

1

mozhihui 发表于 2020-7-11 15:02:22

E>>G>>D这里没看懂。。

mozhihui 发表于 2020-7-11 22:53:08

前面按顺序走好好的,最后那题参数看不懂了。。。为什么从B开始是先到C再回B呢?按照MRO跳过D往下走到B(此时为什么不执行"进入B...",F一开始执行也“进入F...”了呀....),B指向C,C指向D还能往回跑的吗?{:10_291:}

sunrise085 发表于 2020-7-11 23:42:21

mozhihui 发表于 2020-7-11 22:53
前面按顺序走好好的,最后那题参数看不懂了。。。为什么从B开始是先到C再回B呢?按照MRO跳过D往下走到B(此 ...

(此时为什么不执行"进入B...",F一开始执行也“进入F...”了呀....)
那是因为执行了   d=F()   调用了F类的__init__()

请看绿色的那一行字。
其实,它是从 __mro__() 列表中B的位置之后开始执行,正如最开始在 class F 中有 super() 时,是从 __mro__() 列表中F之后开始执行是一样的道理。

mozhihui 发表于 2020-7-12 10:24:34

sunrise085 发表于 2020-7-11 23:42
那是因为执行了   d=F()   调用了F类的__init__()

请看绿色的那一行字。

整理了一下思路:
1、d=F()执行F      >>>   打印“   进入F...   ”
2、从F之后执行E   >>>   打印“   进入E...   ”
3、遇到super(B,self),即从B之后执行C   >>>   打印“   进入C...   ”
4、遇到super(D,self),即从D之后执行B   >>>   打印“   进入B...   ”
5、遇到super(C,self),即从C之后执行A      >>>   打印“   进入A...   ”
#如果把这里变成B,会进入死循环...也就是说加了参数就不符合每个类只调用一次的特性?
#所以参数不当的话就又回到重复调用和死循环的问题了?

sunrise085 发表于 2020-7-12 13:09:10

mozhihui 发表于 2020-7-12 10:24
整理了一下思路:
1、d=F()执行F      >>>   打印“   进入F...   ”
2、从F之后执行E   >>>   打印“...

是的。你的理解是对的。
可以尝试一下,看看结果。

hhheshenme 发表于 2020-7-21 20:54:48

本帖最后由 hhheshenme 于 2020-7-21 21:09 编辑

66

xiangya 发表于 2020-8-13 11:40:37

1

青岛吴彦祖 发表于 2020-8-17 11:42:46

学习
页: 1 [2] 3 4 5
查看完整版本: Python细节之6、类的多继承中super函数的调用顺序