什么是功能
这个问题在这里已经有了答案:
__init__
用于初始化类对象。 当你创建一个myThread
的新对象时,它首先调用threading.Thread.__init__(self)
,然后定义两个属性str1和str2。
请注意,您明确地调用threading.Thread
,它是myThread
的基类。 最好通过super(myThread, cls).__init__(self)
引用父__init__
方法。
Python文档
super有两种典型的用例。 在具有单一继承的类层次结构中,super可以用于引用父类而不显式命名它们,从而使代码更易于维护 。 这种用法与其他编程语言中超级用法非常类似。
第二个用例是在动态执行环境中支持协作式多重继承 。
派生类调用基类init有几个原因。 一个原因是如果基类在__init__
方法中做了一些特殊的事情。 你甚至可能没有意识到这一点。 另一个原因与OOP有关。 假设您有一个基类和两个从它继承的子类。
class Car(object):
def __init__(self, color):
self.color = color
class SportCar(car):
def __init__(self, color, maxspeed):
super(SportCar, cls).__init__(self, color)
self.maxspeed = maxspeed
class MiniCar(car):
def __init__(self, color, seats):
super(MiniCar, cls).__init__(self, color)
self.seats = seats
这只是为了展示一个示例,但您可以看到SportCar和MiniCar对象如何使用super(CURRENT_CLASS, cls).__init(self, PARAMS)
调用Car类来在基类中运行初始化代码。 请注意,您还需要仅在一个地方维护代码,而不是在每个班级中重复该代码。
这里发生的事情是,你从类threading.Thread
继承你的类myThread
。
因此, threading.Thread
类中的所有函数都可以在您的继承类中使用,并且您正在修改类中的__init__
函数。 所以不是运行父类的init方法,而是在你的类中运行__init__
方法。
所以你需要确保父类的__init__
方法在执行修改的__init__
函数之前也运行。 这就是使用threading.Thread.__init__(self)
语句的原因。 它只是调用父类的__init__
方法。