设为首页收藏本站论坛APP下载
查看: 146|回复: 2

python2 重写构造方法-未绑定超类构造方法

[复制链接]

1

主题

2

帖子

26

积分

初级VIP会员

Rank: 1

积分
26
发表于 2018-7-29 09:46:46 | 显示全部楼层 |阅读模式
2金币
在学习多线程类那一块,里面的类重写部分里面有个范例,先继承后重写,有一个范例如下:
class MyThread(threading.Thread):
        def __init__(self,name):
                threading.Thread.__init__(self)
后来我查了下,上面粗体部分这个叫做未绑定的超类构造方法(对应python3中的super方法)但是对这个还是有一点不理解,然后又找到下面这个挺不错的例子:
class A:
    def __init__(self):
        self.flag=1
    def write(self):
        if self.flag==1:
            self.flag=0
            print('Write file success')
        else:
            print('Write file fail')
class B(A):
    def __init__(self):
       A.__init__(self)
        self.s='Test case for class B'
    def output(self):
        print(self.s)
运算结果:
==========RESTART: C:\Users\Mr_Deng\Desktop\test.py==========
>>> testB=B()
>>> testB.write()
Write file success
>>> testB.write()
Write file fail
>>> testB.output()
Test case for class B
>>>
--------------------------------------------------------------------------------------
然后解释说在子类B中使用B.init(self)方法,将当前实例作为self参数提供给未绑定方法
上面这个句话,看不太懂,请问有没有人帮我讲一下testB调用write方法后的详细执行流程?谢谢了

最佳答案

查看完整内容

同学你好,我是while,首先给你一个建议,就是遇到线程和装饰器的问题,你在定义类或者函数的部分进行断点调试,让程序一步一步的走,这样你可以很清楚的看清执行的步骤。 至于你当前的问题: 1、testB=B() 这句首先实例化B类,执行B.__init__同时实例化了A类,然后在B.__init__的self的基础上调用了A.__init__,这个时候B,A的实例都是一个,也就是testB 2、然后就可以调用testB.write了 ...
回复

使用道具 举报

发表于 2018-7-29 09:46:47 | 显示全部楼层
同学你好,我是while,首先给你一个建议,就是遇到线程和装饰器的问题,你在定义类或者函数的部分进行断点调试,让程序一步一步的走,这样你可以很清楚的看清执行的步骤。
至于你当前的问题:
1、testB=B() 这句首先实例化B类,执行B.__init__同时实例化了A类,然后在B.__init__的self的基础上调用了A.__init__,这个时候B,A的实例都是一个,也就是testB
2、然后就可以调用testB.write了
回复

使用道具 举报

1

主题

2

帖子

26

积分

初级VIP会员

Rank: 1

积分
26
 楼主| 发表于 2018-8-9 12:32:30 | 显示全部楼层
好的懂了,谢谢while老师的建议
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 使用vip格式注册

本版积分规则

咨询QQ

学神论坛APP下载地址
快速回复 返回顶部 返回列表