python 面向对象 继承之 supper 函数

news/2024/7/3 13:12:14 标签: python, 多态, 面向对象编程

supper 最基本的使用方法:
重写父类的构造方法 再调用父类的构造方法
能够调用父类的构造方法,再调用父类的构造方法

python">class A(object):
    def __init__(self):
        print('A')

class B(A):
    def __init__(self):
        super().__init__()     #super()  函数,不能不加括号!
        print('----B----')


b = B()

基本应用方式
输出结果:
A
----B----
继承了父类的方法,再重写父类的方法
如果继承的类中在初始化时需要输入其他变量,此时的继承就需要这样做:

python">class RS485(Ethernet):
    def __init__(self,parameter):
        super().__init__(parameterDict=parameter)
python">class Ethernet(object):
    def __init__(self,parameterDict):
        self.com = parameterDict['EthName']
        self.ip = parameterDict['ip']
        self.port = parameterDict['port']
        self.client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
        self.socketInit()
    def run1(self):
        print('run')

    def socketInit(self):
        print(self.ip,self.port)
        self.client.connect((self.ip,self.port))

    
class RS485(Ethernet):
    def __init__(self,parameter):
        super().__init__(parameterDict=parameter)
        print(self.ip)
        print(self.port)


    def printserial(self):
        print(self.ip)
        print(self.port)

def getParameterDict(file,type,port):
    with open(file,'r',encoding='utf-8') as f:
        objectDict = json.load(f)
    for key in objectDict:
        if key == type:
            portList = objectDict[key]
            for portDict in portList:
                for portDictKey in portDict:
                    if portDict[portDictKey] == port:
                        portParameterDict = portDict
    return portParameterDict

eth0Parameter = getParameterDict('GWConfig.txt','ETH','eth0')
# eth1 = Ethernet(eth0Parameter)
# eth1.recvJsonString()

parameter = getParameterDict('GWConfig.txt','ETH','eth0')
serial1 = RS485(parameter)
serial1.run1()

这样就实现了继承,通过super的方式超继承。

以上的调用方式为示例,其实更多的方式则是继承父类的属性值
super()._init(name,age,weight),通过这样的方式继承父类的这些属性,但是这属于软编码的方式,也就是父类的名字可以随便更改的方式,但是并不影响子类的集成,子类继承一次Person即可,如果Person变成了People也是没问题的,只要修改继承的类即可
但是如果采用硬编码的方式:
Person._init(self,name,age,weight) 此时,如果父类变成了People,那么这里也需要改成People

结合继承和 object._mro()的例子:

python">class A(object):
    def __init__(self):
        print("A")


class C(A):
    def __init__(self):
        print("C")
        super().__init__()


class B(A):
    def __init__(self):
        print("B")
        super().__init__()


class D(B,C):
    def __init__(self):
        print("D")
        super().__init__()


if __name__ == '__main__':
    d = D()
    print(D.__mro__)

运行结果:
D
B
C
A
(<class ‘main.D’>, <class ‘main.B’>, <class ‘main.C’>, <class ‘main.A’>, <class ‘object’>)
从中可以查看到继承顺序


http://www.niftyadmin.cn/n/1684833.html

相关文章

2019年第十届蓝桥杯【C++省赛B组】【第九题:后缀表达式】——附解题思路及代码

蓝桥杯历届题目及解析汇总&#xff08;附思路及代码&#xff09;【点击此进入】 蓝桥杯&#xff0c;ACM算法学习【文档】【视频】大放送【点击此进入】 第九题 标题&#xff1a;后缀表达式&#xff08;时间限制: 1.0s 内存限制: 256.0MB 本题总分&#xff1a;25 分&#xff09…

生成器公式实现生成器与yield 实现生成器 python实现

生成器定义&#xff1a;python中边循环边计算的机制 生成器来由&#xff1a;列表中所有的数据都在内存当中&#xff0c;如果有海量数据的话就会空耗内存&#xff0c;我们只会用到其中的几个数据&#xff0c;而却创建了一个很大的列表&#xff0c;我们只需要取出列表的几个值&am…

2019年第十届蓝桥杯【C++省赛B组】【第十题:灵能传输】——附解题思路及代码

欢迎大家加入CSDN-蓝桥杯竞赛社区 https://bbs.csdn.net/forums/lanqiaobei 蓝桥杯历届题目及解析汇总&#xff08;附思路及代码&#xff09;【点击此进入】 蓝桥杯&#xff0c;ACM算法学习【文档】【视频】大放送【点击此进入】 第十题 标题&#xff1a;灵能传输&#xff08;…

在大量创建类时减少内存消耗 python实现

问题背景&#xff1a;在游戏开发中&#xff0c;有一个玩家类Player&#xff0c;每有一个在线玩家&#xff0c;在服务器内则有一个player的实例&#xff0c;当在线的人数很多时&#xff0c;将产生大量实例(百万级) 解决方向&#xff1a;在实例化时&#xff0c;支持动态绑定的__d…

【VS2019快捷键使用教程】Visual Studio 快捷开发操作

Visual Studio 快捷开发操作 [变量/方法/类] 相关操作 Ctrl R,Ctrl R &#xff1a;变量/方法/类[重命名] AltF12: &#xff1a;变量/方法/类[查看相关定义(Esc退出)] 光标移动 Ctrl ← / → &#xff1a;按单词移动光标 Ctrl Home / End &#xff1a;移动到文档前端/末…

python程序在嵌入式linux系统运行。。

最近在写运行在嵌入式linux系统下的python程序。中间遇到很多坑&#xff0c;接下来我就一一说一下。 从windows编写python脚本&#xff0c;然后将文件复制到嵌入式linux下&#xff0c;运行时报错&#xff1a; 通过vi编辑器查看发现在每一行的后面都有一个^M,每一行都有 我一看…

python学习之tkinter 从一个错误说起

开宗明义&#xff0c;最近几天在学习tkinter&#xff0c;开发界面&#xff0c;中间参考过很多代码&#xff0c;在借鉴别人代码时&#xff0c;遇到了这样的错误&#xff1a; _tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by…

『Winform』C# Winform WebBrowser控件中操作网页元素大全

文章目录1、获取非input控件的值2、获取input控件的值3、给输入框赋值4、CheckBox选中5、根据已知有ID的元素操作没有ID的元素6、获取Div或其他元素的样式7、直接执行页面中的脚本函数&#xff0c;带动态参数或不带参数都行8、自动点击、自动提交9、自动赋值&#xff0c;然后点…