gpt4 book ai didi

python - 类中的 Thread.__init__(self) 如何工作?

转载 作者:行者123 更新时间:2023-11-28 20:20:11 31 4
gpt4 key购买 nike

所以我找到了这段代码:

from threading import Thread
class Example(Thread):
def __init__(self):
Thread.__init__(self)

def run (self):
print("It's working!")
Example().start()

它打印出“它正在工作!”使用另一个线程,但这是如何工作的?我在类里面找不到任何关于 Thread.__init__(self) 的信息。它与父类(super class)有关吗?

最佳答案

您的__init__ 方法完全是多余的。您实际上是将 Thread.__init__() 替换为您自己的实现,您自己的实现只需调用 Thread.__init__()。如果你删除它,什么都不会改变:

class Example(Thread):
def run (self):
print("It works!")

您的 Example.run() 方法被简单调用是因为您使用 Thread.start() method 启动线程:

start()
Start the thread’s activity.

It must be called at most once per thread object. It arranges for the object’s run() method to be invoked in a separate thread of control.

另见 Thread.run() documentation :

run()
Method representing the thread’s activity.

You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.

您的 __init__ 方法与此无关。

现在,如果您在 Thread 子类中创建了一个 __init__ 方法,然后确保 Thread.__init__ 被调用,然后你阻止类设置重要的实例信息,破坏实例:

>>> from threading import Thread
>>> class Example(Thread):
... def run (self):
... print("It works!")
...
>>> Example().start()
It works!

>>> class BrokenExample(Thread):
... def __init__(self):
... # not doing anything
... pass
... def run (self):
... print("It works!")
...
>>> BrokenExample().start()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/.../lib/python2.7/threading.py", line 737, in start
raise RuntimeError("thread.__init__() not called")
RuntimeError: thread.__init__() not called

因为这是一个常见的错误,Thread.start 方法抛出一个自定义异常来明确地告诉您 Thread.__init__ 没有被执行。

关于python - 类中的 Thread.__init__(self) 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31851514/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com