2016-06-17 39 views
0

我的理解是:方法VS __init__在這些方法的Python類

  • __init__()就像構造函數。
  • run()當這個類的線程啓動時被調用。

但是,爲什麼我們需要一個運行方法?我們能否實例化類的一個對象,並且所有初始化都保留在__init__()

我已經通過this article,無法賺大錢 請您分享一下這方面的一些見解嗎?

+0

爲了區分初始化(發生在任何實例上)和要在獨立線程(進入run方法)中運行的代碼。 – pvg

+0

謝謝大家!所以__init__是初始化的,並在主線程中運行...其中run方法在子線程的整個生命週期中都可用。 – prat

+0

不,他們都只是方法。 __init__是實例初始化的一種「神奇方法」。 Python線程模塊在實例化新線程時可以調用您的運行(但也包括其他任何方法)。 – pvg

回答

1

我認爲Python線程模塊提供了一個很好的例子。如果你有一個始終運行相同函數的派生線程類,但是也許你想給它不同的輸入。您可能想要實例化類中的很多對象,但輸入不同 - 並且您不希望它開始運行。

也許你想將這個實例化(但未啓動)線程的列表傳遞給某種啓動並監視它們的管理器,而不管它們是什麼類型的線程。

在這種情況下,將創建與運行分開是很好的做法。

1

__init__只運行一次(構建對象時),而run(在您給出的示例中)只要對象存在就在後臺運行(另一個進程)。

__init__run之間唯一的區別是第一個在主線程中運行,而第二個在另一個線程中運行。

但是,爲什麼我們需要一個運行方法?我們可能已經實例化了一個類的對象,並且所有初始化都保留在_init__中?

實際上,所有的初始化都已經在__init__中。該示例中的run方法僅演示後臺線程,並不是必需的。

0

對於作爲構造函數的__init__()是正確的。在這個例子中,目標是在一個線程中運行一個函數run()函數。該示例提供了一個乾淨的方式來完成此操作。您不能運行__init__()中的run()函數內的代碼,因爲這不會產生新線程。

考慮這樣的情況:

example = ThreadingExample() 
do_something_important_that_doesnt_want_to_wait() 

這適用於示例代碼。