静态方法-如何从另一个方法调用一个方法?

当我有调用类中另一个方法的常规方法时,我必须这样做

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

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

self.dosomethingelse()

因为没有实例。在 Python 中,从同一类的另一个静态方法调用静态方法需要做什么?

139913 次浏览

注意-看起来这个问题已经改变了一些。如何从静态方法调用实例方法的问题的答案是,如果不将实例作为参数传入,或者在静态方法内实例化该实例,就不能调用该实例方法。

下面主要回答“如何从另一个静态方法调用一个静态方法”:

请记住,在 Python 中,静态方法和类方法之间存在 的区别。静态方法不接受隐式第一个参数,而类方法接受类作为隐式第一个参数(通常按照约定为 cls)。考虑到这一点,你可以这样做:

如果是静态方法:

test.dosomethingelse()

如果它是一个类方法:

cls.dosomethingelse()

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()

不能从静态方法调用非静态方法,但可以通过在静态方法内部创建实例来调用。

应该是这样的

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 instance
a = test2()
a.dosomethingelse()


def dosomethingelse(self):
print "do something else"


test2.dosomething()

好的,类方法和静态方法的主要区别是:

  • 类方法有自己的标识,这就是为什么它们必须从一个实例中调用的原因。
  • 另一方面,静态方法可以在多个实例之间共享,因此必须从 THE 类中调用它

在 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()

如果它们不依赖于类或实例,那么只需将它们设置为函数即可。

因为这似乎是显而易见的解决办法。当然,除非您认为需要对它进行覆盖、子类化等操作。如果是这样,那么以前的答案是最好的选择。祈祷我不会仅仅因为提供了一个可能适合或可能不适合某人需要的替代解决方案而被降价;)。

因为正确的答案将取决于所讨论代码的用例;)

如果调用函数与调用方静态方法在同一个类中,则可以调用 __class__.dosomethingelse()而不是 self.dosomethingelse()

class WithStaticMethods:
@staticmethod
def static1():
print("This is first static")


@staticmethod
def static2():
# WithStaticMethods.static1()
__class__.static1()
print("This is static too")




WithStaticMethods.static2()

印刷品:

This is first static
This is static too