2016-12-14 8 views
0

私は、ビデオ会議システムを制御するPythonモジュールを持っているとしましょう。このモジュールでは、テレビ会議、通話、電話帳などの状態を制御するためのグローバル変数と関数をいくつか持っています。Pythonでクラスを作成する必要性について

このモジュールは、制御システムを起動するために、ビデオ会議(イーサネット接続、ポーリング状態など)

ここで、第2のビデオ会議システムの制御を開始する必要がある場合、私はその問題に近づく方法がわかりません。私はビデオ会議モジュールをクラスにして、両方とも初期化するのが問題ですが、ビデオ会議クラスのインスタンスを2つ用意する必要はありません。なぜなら、これらのオブジェクトで何もしないのは、システムを初期化するだけでいいからです。その後、私は電話したり、他の何かのためにそれらを保つ必要はありません。

コード例:

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回コールしますか? –

答えて

2

おそらくこれは好みの問題ですが、私は上記の場合にクラスを持つことがより安全な賭けになると思います。しばしば私は関数を書くつもりで、複雑すぎるとクラスを作成する必要があると思うが(しばしばそうする)、単純すぎるクラスを作成したことはなく、これは簡単すぎると思ったなぜ私は関数を作成しませんでしたか?

2つではなく1つのオブジェクトがあっても、クラスを作成する際の読みやすさに役立ちます。例:

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オブジェクトの完璧な使用例のようです。あなたは、国家(yuck!)を管理し、制御のための関数を呼び出すグローバル(ew!)を持っているとします。

あなたは、状態を保持する属性とそれを変更するメソッドを持つオブジェクトにそのすべてを変換するチャンスがあると思います。初期化コードだけではなく、vidC1vidC2のオブジェクトがリファクタリングされるように思えます。

+0

私は@Adam smithに同意しますが、コアの問題はあなたのコードが現在グローバルな状態を使用していることです。 VideoConferenceクラスを使用してグローバルバーを初期化しないでください。実際には、ビデオシステムに関連するすべての状態をクラスのインスタンスに格納してください。 – Nath

1

私はこの問題をあなたの例で正しい方法に近づけていると思います。このようにして複数のビデオ会議を開催することができ、それぞれの会議は異なる属性状態を持つことができます(vidC1.conference_durationなど)。

関連する問題