我的理解是:方法VS __init__在這些方法的Python類
__init__()
就像構造函數。run()
當這個類的線程啓動時被調用。
但是,爲什麼我們需要一個運行方法?我們能否實例化類的一個對象,並且所有初始化都保留在__init__()
?
我已經通過this article,無法賺大錢 請您分享一下這方面的一些見解嗎?
我的理解是:方法VS __init__在這些方法的Python類
__init__()
就像構造函數。run()
當這個類的線程啓動時被調用。但是,爲什麼我們需要一個運行方法?我們能否實例化類的一個對象,並且所有初始化都保留在__init__()
?
我已經通過this article,無法賺大錢 請您分享一下這方面的一些見解嗎?
我認爲Python線程模塊提供了一個很好的例子。如果你有一個始終運行相同函數的派生線程類,但是也許你想給它不同的輸入。您可能想要實例化類中的很多對象,但輸入不同 - 並且您不希望它開始運行。
也許你想將這個實例化(但未啓動)線程的列表傳遞給某種啓動並監視它們的管理器,而不管它們是什麼類型的線程。
在這種情況下,將創建與運行分開是很好的做法。
__init__
只運行一次(構建對象時),而run
(在您給出的示例中)只要對象存在就在後臺運行(另一個進程)。
__init__
和run
之間唯一的區別是第一個在主線程中運行,而第二個在另一個線程中運行。
但是,爲什麼我們需要一個運行方法?我們可能已經實例化了一個類的對象,並且所有初始化都保留在_init__中?
實際上,所有的初始化都已經在__init__中。該示例中的run
方法僅演示後臺線程,並不是必需的。
對於作爲構造函數的__init__()
是正確的。在這個例子中,目標是在一個線程中運行一個函數run()
函數。該示例提供了一個乾淨的方式來完成此操作。您不能運行__init__()
中的run()
函數內的代碼,因爲這不會產生新線程。
考慮這樣的情況:
example = ThreadingExample()
do_something_important_that_doesnt_want_to_wait()
這適用於示例代碼。
爲了區分初始化(發生在任何實例上)和要在獨立線程(進入run方法)中運行的代碼。 – pvg
謝謝大家!所以__init__是初始化的,並在主線程中運行...其中run方法在子線程的整個生命週期中都可用。 – prat
不,他們都只是方法。 __init__是實例初始化的一種「神奇方法」。 Python線程模塊在實例化新線程時可以調用您的運行(但也包括其他任何方法)。 – pvg