2017-09-22 39 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.convert_1(data_item)無需創建SomeClass一個實例。

比方說,我想在SomeClass裏面有一個方法,它可以連續進行兩次轉換,並且也希望將該方法作爲一種靜態方法。

我可以做

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

SomeClass?這種感覺是錯誤的,因爲我在自己的定義中稱這個類,但是我不能想出另一種「更加pythonic」的方式。

+0

該類是由您執行'combined_convert'時所定義的,因此沒有問題。 – thebjorn

+1

您可以始終使用方法引用類的*實例*(使用'self');爲什麼要引用這個類是一個問題?它只是'class'語句中的頂級代碼,不能引用正在構建的類。 – chepner

+0

您是否嘗試過在模塊中使用頂級函數?看起來你正在嘗試使用classespacing – 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

請爲負面投票添加評論 –