在下面显示的同一个类中调用静态方法的两种方法有区别吗?
class MyClass:
def __init__(self):
self.do_something() #or MyClass.do_something()?
@staticmethod
def do_something():
pass
Run Code Online (Sandbox Code Playgroud)
更具体地说,特别是在重构(更改类名)和继承的情况下(因为静态方法可以在Python中继承和覆盖)?
我只能想到一种会产生影响的情况; 你什么时候继承MyClass?相比:
>>> class MyClass(object):
def __init__(self):
self.do_something()
@staticmethod
def do_something():
print "Base class"
>>> class SubClass(MyClass):
@staticmethod
def do_something():
print "Sub class"
>>> s = SubClass()
Sub class
Run Code Online (Sandbox Code Playgroud)
有:
>>> class MyClass(object):
def __init__(self):
MyClass.do_something()
@staticmethod
def do_something():
print "Base class"
>>> class SubClass(MyClass):
@staticmethod
def do_something():
print "Sub class"
>>> s = SubClass()
Base class
Run Code Online (Sandbox Code Playgroud)
这是一个人为的例子,但您应该考虑您认为适当的行为应该是什么.
你改变类名的重构例子也是一个很好的例子; self不必每次重命名类时都要更新,而如果你有明确的MyClass引用,你必须全部更新它们(一个好的IDE会为你做这个,但如果你可以避免它更好).