调用静态方法的惯用方式
Idiomatic way of calling a static method
在 class 中从 调用静态方法的 pythonic 方法是什么?
class SomeClass:
@staticmethod
def do_something(x: int) -> int:
return 2*x + 17
def foo(self) -> None:
print(self.do_something(52)) # <--- this one?
print(SomeClass.do_something(52)) # <--- or that one?
class SomeClass:
@staticmethod
def do_something(x: int) -> int:
return 2*x + 17
def foo(self) -> None:
print(SomeClass.do_something(52)) # <--- or that one?
我认为使用
调用 staticmethod
是 pythonic
SomeClass.do_something(52)
来源:
It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()); the instance is ignored except for its class.
即使在实例上调用它,它仍然只会从中推断出 class 并执行函数
x = 123
x.__class__
<class 'int'>
这完全取决于您的用例,因为在子类化的上下文中,这两种方法做不同的事情。考虑以下因素:
class OtherClass(SomeClass):
@staticmethod
def do_something(x: int) -> int:
return 42
OtherClass().foo()
这将打印 42
和 121
因为 self.do_something(52)
使用 method resolution order 而 SomeClass.do_something(52)
总是引用相同的方法(除非名称 SomeClass
绑定到不同的对象)。
在 class 中从 调用静态方法的 pythonic 方法是什么?
class SomeClass:
@staticmethod
def do_something(x: int) -> int:
return 2*x + 17
def foo(self) -> None:
print(self.do_something(52)) # <--- this one?
print(SomeClass.do_something(52)) # <--- or that one?
class SomeClass:
@staticmethod
def do_something(x: int) -> int:
return 2*x + 17
def foo(self) -> None:
print(SomeClass.do_something(52)) # <--- or that one?
我认为使用
调用staticmethod
是 pythonic
SomeClass.do_something(52)
来源:
It can be called either on the class (e.g. C.f()) or on an instance (e.g. C().f()); the instance is ignored except for its class.
即使在实例上调用它,它仍然只会从中推断出 class 并执行函数
x = 123
x.__class__
<class 'int'>
这完全取决于您的用例,因为在子类化的上下文中,这两种方法做不同的事情。考虑以下因素:
class OtherClass(SomeClass):
@staticmethod
def do_something(x: int) -> int:
return 42
OtherClass().foo()
这将打印 42
和 121
因为 self.do_something(52)
使用 method resolution order 而 SomeClass.do_something(52)
总是引用相同的方法(除非名称 SomeClass
绑定到不同的对象)。