python 面向对象 super().__init__()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 面向对象 super().__init__()相关的知识,希望对你有一定的参考价值。


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 18 14:01:36 2020

@author: lg
"""

class Init(object):


def __init__(self, value):
self.value=value
print(start Init,self.value)




class Add2(Init):
def __init__(self, value):

print(start Add2,value)
super(Add2, self).__init__(value)

# print(self.value,add,up)
self.value = 2 + self.value
# print(self.value,add,down)



class Mul5(Init):
def __init__(self, value):

print(start Mul5,value)
super(Mul5, self).__init__(value)

# print(self.value,mul5,up)
self.value = self.value * 5
# print(self.value,mul5,down)



class Pro(Mul5, Add2):

print(start Pro)
pass


class Incr(Pro):
print(start Incr1)
def __init__(self, value):
print(start Incr,value)


super(Incr, self).__init__(value)
# print(self.value,Intr,up)
self.value = self.value + 1
# print(self.value,Intr,down)
print(Incr.mro())
[<class __main__.Incr>, <class __main__.Pro>, <class __main__.Mul5>, <class __main__.Add2>, <class __main__.Init>, <class object>]

说实话上面关于super的用法我并不十分理解,姑且说明一我的理解

  • 从Incr.mro()中我们可以看出类继承的关系,这里面有单继承和多继承
  • 这个例子的特别之处是value,比如在类Incr中并不是马上被执行 print(self.value,‘Intr’,‘up’)而是 super(Incr, self).init(value)被向上传递,一直传到根节点
p = Incr(5)
start Incr 5
start Mul5 5
start Add2 5
start Init 5
  • 也就是说根节点类Init中的value是5,然后在顺序执行
print(p.value) #查看你的结果如果是36 x


以上是关于python 面向对象 super().__init__()的主要内容,如果未能解决你的问题,请参考以下文章

python 面向对象 super().__init__()

Python_基础_(面向对象进阶)

Python面向对象微案例_钻石问题与super

Python面向对象微案例_钻石问题与super

Python面向对象微案例_钻石问题与super

python 面向对象MRO C3算法 super