Python的静态方法 – 如何从另一个方法调用一个方法

当我有一个常规的方法来调用另一个方法,我不得不这样做

class test: def __init__(self): pass def dosomething(self): print "do something" self.dosomethingelse() def dosomethingelse(self): print "do something else" 

但是当我有静态方法,我不能写

 self.dosomethingelse() 

因为没有实例。 在Python中如何从同一个类的另一个静态方法中调用静态方法?

编辑:多么混乱。 好吧,我编辑回到原来的问题。 我已经对Peter Hansen的评论中的第二个问题有了答案。 如果你认为我应该打开另一个问题,我已经有了答案,请告诉我。

class.method应该工作。

 class SomeClass: @classmethod def some_class_method(cls): pass @staticmethod def some_static_method(): pass SomeClass.some_class_method() SomeClass.some_static_method() 

在Python中如何从同一个类的另一个静态方法中调用静态方法?

 class Test() : @staticmethod def static_method_to_call() pass @staticmethod def another_static_method() : Test.static_method_to_call() @classmethod def another_class_method(cls) : cls.static_method_to_call() 

注 – 看起来问题已经改变了一些。 对于如何从静态方法调用实例方法的问题的答案是,如果不将实例作为parameter passing或在静态方法内实例化该实例,则不能。

接下来的内容主要是回答“你如何从另一个静态方法调用静态方法”:

请记住,Python中的静态方法和类方法有区别的。 一个静态方法不带任何隐含的第一个参数,而一个类方法则把这个类作为隐含的第一个参数(通常按照惯例是cls )。 记住这一点,你将如何做到这一点:

如果这是一个静态的方法:

 test.dosomethingelse() 

如果是类方法:

 cls.dosomethingelse() 

确定类方法和静态方法之间的主要区别是:类方法有其自己的身份,这就是为什么他们必须从INSTANCE中调用。 另一方面,静态方法可以在多个实例之间共享,所以它必须从THE CLASS中调用

你不能从静态方法调用非静态方法,但通过在静态方法内创build一个实例….它应该像这样工作

 class test2(object): def __init__(self): pass @staticmethod def dosomething(): print "do something" #creating an instance to be able to call dosomethingelse(),or you may use any existing instace a=test2() a.dosomethingelse() def dosomethingelse(self): print "do something else" test2.dosomething() 

希望能帮到你:)

如果这些不依赖于类或实例,那么为什么不把它们作为一个函数呢? 因为这看起来是明显的解决scheme。 当然,除非你认为这将需要被覆盖,子类等,如果是这样的话,以前的答案是最好的select。 手指交叉我不会被标记为仅仅提供可能或不适合某人需要的替代解决scheme;)。

正确的答案将取决于有关代码的用例;)享受