2011-01-28 6 views
0

にすると、defをクラスに入れないで宣言する方法があります。 ?定義を

def first_method(): 
    pass 

def second_method(): 
    pass 

をして@classmethodまたは@staticmethodを使用しない::だから、私はちょうど、分離クラスに多くのdef年代を格納する必要がある場合、私はシンプルなこの操作を行う必要があります

class methods(): 

    @classmethod 
    def first_method(cls): 
     pass 

    @staticmethod 
    def second_method(): 
     pass 

最初の方法が適切かどう

、私はどのようにプライベートとパブリックメソッドをマークする必要がありますか?

答えて

3

はい。あなたのクラスからインスタンスメソッドではない関数を保つだけです。

あなたはJavaのように思っています。 PythonはJavaではありません。 Pythonにはパブリックメソッドとプライベートメソッドを持たせる真の方法はありません。名前の一部を変更して、名前の冒頭に_または__のプライバシーを追加することができますが、強制はできません。

私はいつもPythonでプログラミングしていましたが、私はアクセス修飾子を望んでいないことが分かりました。

+0

丁度良い苦情があります。リーディング '__'(ネーム・マングリング)は無駄なもので、最悪の有害なものです(曖昧なNameErrors)。 – delnan

+0

@delnanはそれを知らなかった。正直言って、私はそれを使ったことはありませんでした(どうしてでしょうか) –

+0

@delnan:もう少し詳しいことを教えてください。言い換えれば、名前のマングリングで間違っているのは何ですか?ありがとう。 –

3

Pythonにはプライベートメソッドとパブリックメソッドはありません。慣例により、単一のアンダースコアで始まる名前は、ユーザーが存在に依存するべきではないという意味で、「プライベート」とみなされます。さらに、文書公開インタフェースを使用することもできます。すべての残りの部分は関連性がありません。

軽度に関連する機能のセットは、もっとpythonicな解決策であると私は言うだろう。