2017-03-31 5 views
0

一般的にはOOP、特にPythonに関しては質問があります。さんはpriorities.py、例えば、私が持っているとしましょう - 優先順位を管理するためのシンプルなGUIプログラムと三つのクラスがあります:優先順位、クライアント、GuiPart:Python OOP - main()を.pyファイルのどのクラスの外にも置くべきでしょうか?

# priorities.py 
# GUI program to manage priorities 

from tkinter import * 

class Priority: 
    pass 

class GuiPart: 
    def __init__(self): 
     self.root = self.createWindow() 

    def createWindow(self): 

     root = Tk() 
     root.resizable(width = False, height = False) 
     root.title("Priorities") 

     return root 

    def display(self): 

     Label(self.root, 
       text = "testes").grid(row = 0, column = 1) 

class Client: 
    pass 

def main(): 
    g = GuiPart() 
    g.display() 
    root = g.root.mainloop() 

main() 

は、私はすべてのクラスの外)(メインデフ置くべき私はそれをClientクラスに入れるべきですか?

+2

私はスタイルガイドが何を言っているのか(あるいは他の人が何を考えているのか)は分かりませんが、私は 'def main()'を使わないので、 'if __name__ == '__main __:それは、あなたがやっているような、クラスの外のファイルの最下部にあります。 –

+0

あなたのコードが機能しないか、効率を改善したい場合を除き、この質問はCode Reviewに適しています。 –

+1

@RocketHazmat 'main'も関数として定義すると、そのコードをテストするのが容易になります。 – chepner

答えて

4

すべてのモジュール(Pythonのファイルは)これは"__main__"に等しく、これは、このことを意味している場合、組み込み__name__変数を持っている開発/テスト/舞台/ PRODセットアップ

  • 増加コードの可読性の間を遷移することができますファイルが直接実行されましたが、__name__が他のものと等しい場合、これは現在のファイルが他のPythonファイルにインポートされたことを意味します。

    あなたが直接、またはモジュールとして、このファイルを実行している場合は、あなたが使用したコード・ファイルの種類を認識する__name__変数を使用することができ、以下同様の:

    # Some codes 
    if __name__ == '__main__': 
        main() 
    

    今、ユーザーがこのファイルを直接実行することができ、および/またはプログラマができますmain()機能を実行せずにこのモジュールを他のコードで使用してください。

  • 2

    マイ好ましいアプローチ:

    if __name__ == '__main__':ディレクティブ

    理由で別のメインファイル:

    1. アプリケーションロジックとロジックを呼び出すことが別のものです。
    2. 異なる環境設定を効果的に維持して適用することができます。そう、私たちはシームレスにも
    +0

    申し訳ありませんが、私は完全に理解できません、__name__は何の名前ですか? .pyファイルの? – wraith46

    +1

    これはpythonの魔法の言葉です。これはファイル名を反映するため、pyファイルex ..(xyz.py)を直接実行すると、これが開始コーリングポイントであることが分かります。実行される..残りの時間はこれ以上ではありませんhttp://stackoverflow.com/questions/419163/what-does-if-name-main-do –

    +0

    ありがとう、ありがとう。 – wraith46

    関連する問題