2017-09-22 12 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

请为负面投票添加评论 –