This question already has answers here:
Understanding Python super() with __init__() methods [duplicate]
(7 个回答)
How to invoke the super constructor in Python?
(7 个回答)
What does 'super' do in Python? - difference between super().__init__() and explicit superclass __init__()
(11 个回答)
3年前关闭。
我知道 __init__ 用于初始化一个类,但它在下一行的目的是什么。有什么替代方法吗?
(7 个回答)
How to invoke the super constructor in Python?
(7 个回答)
What does 'super' do in Python? - difference between super().__init__() and explicit superclass __init__()
(11 个回答)
3年前关闭。
class myThread(threading.Thread):
def __init__(self,str1,str2):
threading.Thread.__init__(self)
self.str1 = str1
self.str2 = str2
def run(self):
run1(self.str1,self.str2)
我知道 __init__ 用于初始化一个类,但它在下一行的目的是什么。有什么替代方法吗?
最佳答案
__init__
用于初始化类对象。创建 myThread
的新对象时,它首先调用 threading.Thread.__init__(self)
,然后定义两个属性 str1 和 str2。
请注意,您明确调用 threading.Thread
,它是 myThread
的基类。最好通过 __init__
引用父 super(myThread, cls).__init__(self)
方法。
Python 文档
派生类调用基类 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 类来运行基类中的初始化代码。请注意,您还需要仅在一个地方维护代码,而不是在每个类中都重复。关于python - __init__ 方法在这里的作用是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45779729/
10-14 19:34