2016-12-14 50 views
0

假設我有一個Python模塊來控制視頻會議系統。在這個模塊中,我有一些全局變量和函數來控制視頻會議,電話,電話簿等的狀態。關於在Python中創建類的需求

要啓動控制系統,模塊自動執行一個函數來初始化視頻會議(以太網連接,投票狀態等)

現在,如果我需要開始控制第二個視頻會議系統,我不知道如何解決這個問題:我想讓視頻會議模塊成爲一個類並創建兩個實例(一個爲每個視頻會議系統),然後初始化兩個,但問題是我真的不需要有兩個視頻會議類的實例,因爲我不會做任何事情與這些對象,因爲我只需要初始化系統;之後,我不需要打電話或保留他們的其他東西。

示例代碼:

Videoconference.py

class Videoconference: 
    def __init__(self): 
     self.state = 0 
     #Initialization code 

Main.py

from Videoconference import Videoconference 

vidC1 = Videoconference() 
vidC2 = Videoconference() 
#vidC1 and vidC2 will never be use again 

所以,問題是:我應該在視頻會議模塊轉換爲一個類,並創建實例(就像在這個例子中),即使我不打算將它們用於初始化過程的其他任何應用程序?還是有沒有創建一個類的另一種解決方案?

+2

將初始化代碼包裝在函數中並調用它兩次? –

回答

2

也許這是一個偏好問題,但我認爲在上述案例中有一個班級將是更安全的選擇。通常我會寫一個函數,當它變得太複雜時,我會認爲我應該創建一個類(並且經常這樣做),但我從來沒有創建過簡單的類,並且認爲這太容易了我爲什麼不創建一個函數?

即使您有一個對象而不是兩個對象,它通常有助於創建類的可讀性。例如:

vid = VideoConference() 
# vid.initialize_old_system() # Suppose you have an old system that you no longer use 
           # But want to keep its method for reference 
vid.initialize_new_system() 
vid.view_call_history(since=yesterday) 
1

這聽起來像是一個VideoConferenceSystem對象的完美用例。你說你擁有支配狀態的全局變量(ew!)並調用控制函數。

聽起來對我來說,就像你有機會將所有的東西都轉換成一個擁有屬性的對象,該屬性持有狀態和方法來改變它。聽起來你應該重構的不僅僅是初始化代碼,所以那些vidC1vidC2對象很有用。

+0

我同意@Adam smith的核心問題是你的代碼目前使用全局狀態。不要使用VideoConference類來初始化全局條,實際上將與視頻系統相關的所有狀態存儲在類的實例中。 – Nath

1

我認爲你在你的例子中正確地接近這個問題。這樣,您可以進行多個視頻會議,每個視頻會議可能具有不同的屬性狀態(例如vidC1.conference_duration等)。