问题:静态方法-如何从另一个方法调用一个方法?
当我有用于在类中调用另一个方法的常规方法时,我必须这样做
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)评论中第二个问题的答案。如果您认为我应该再提出一个已经存在的答案的问题,请告诉我。
回答 0
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()
回答 1
在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()
回答 2
注意-看来问题已经改变了一些。关于如何从静态方法调用实例方法的问题的答案是,您不能不将实例作为参数传入或在静态方法中实例化该实例。
接下来的内容主要是回答“如何从另一个静态方法调用静态方法”:
请记住,Python中的静态方法和类方法之间是有区别的。静态方法不使用隐式第一参数,而类方法则将类作为隐式第一参数(通常cls
是按惯例)。考虑到这一点,这是您要执行的操作:
如果是静态方法:
test.dosomethingelse()
如果是类方法:
cls.dosomethingelse()
回答 3
好的,类方法和静态方法之间的主要区别是:
- class方法具有自己的标识,这就是为什么必须在INSTANCE中调用它们的原因。
- 另一方面,可以在多个实例之间共享静态方法,因此必须从CLASS中调用它
回答 4
您不能从静态方法调用非静态方法,但是可以通过在静态方法内创建实例来实现。
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()
希望对您有帮助:)
回答 5
如果这些不依赖于类或实例,那为什么不仅仅使它们成为一个函数呢?因为这似乎是显而易见的解决方案。当然,除非您认为它将需要被覆盖,子类化等等。如果是这样,那么前面的答案是最好的选择。我只是简单地提供一个可能满足或可能不适合某人需求的替代解决方案而感到沮丧;)。
因为正确的答案将取决于相关代码的用例;)享受