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年前关闭。



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