2017-09-22 20 views
2

私は別の静的メソッドからクラスの静的メソッドを呼び出す状況に陥ります。確かに、私はX-Y質問をしない、私はいくつかの背景を与えることを試みている。Pythonのクラス内で静的メソッドを呼び出す

私は、データコンテナとコンテナ内のデータを変換するいくつかのメソッドを保持するクラスを持っています。私はまた、変換器は、クラスのインスタンスなしに外部から呼び出し可能なようにしたいように、私は、静的メソッドを選択します。

class SomeClass(object): 

    def __init__(self,some_data): 
    self.data = some_data 

    @staticmethod 
    def convert_1(data_item): 
    return 1+data_item 

    @staticmethod 
    def convert_2(data_item): 
    return 2*data_item 

は、今私はSomeClassのインスタンスを作成することなく、SomeClass.convert_1(data_item)を行うことができます。

たとえば、SomeClassの中にメソッドを2つ変換し、そのメソッドを静的メソッドにしたいとします。

は私がSomeClass内部

@staticmethod 
def combined_convert(data_item): 
    data_item = SomeClass.convert_1(data_item) 
    data_item = SomeClass.convert_2(data_item) 
    return data_item 

を行うことができますか?私はクラスを独自の定義の中で呼んでいるので、これは間違っていると感じますが、別の「もっとpython的な」方法を考え出すことはできません。

+0

クラスは 'combined_convert'を実行するときに問題がないように定義されます。 – thebjorn

+1

クラスの* instances *は常に(selfで)メソッドから参照します。クラスを参照することがなぜ問題になるのでしょうか?構築中のクラスを参照することができない 'class'ステートメント内の最上位レベルのコードです。 – chepner

+0

モジュール内で最上位レベルの関数を使用しようとしましたか?名前空間にクラスを使用しようとしているようです。 – Felk

答えて

1

クラスメソッドを作成できます。

@classmethod 
def combined_convert(cls,data_item): 
    data_item = cls.convert_1(data_item) 
    data_item = cls.convert_2(data_item) 
    return data_item 
+0

私は手数料、これは間違っている、私はインスタンスを通過する外からこのメソッドを呼び出すことはできませんか? – Dschoni

+0

インスタンスなしでメソッドを呼び出すことができます –

+0

pls否定投票のコメントを追加する –

関連する問題