从类中调用静态方法的不同方法之间的区别

God*_*ith 0 python

在下面显示的同一个类中调用静态方法的两种方法有区别吗?

class MyClass:

  def __init__(self):
    self.do_something() #or MyClass.do_something()?

  @staticmethod
  def do_something():
    pass
Run Code Online (Sandbox Code Playgroud)

更具体地说,特别是在重构(更改类名)和继承的情况下(因为静态方法可以在Python中继承和覆盖)?

jon*_*rpe 6

我只能想到一种会产生影响的情况; 你什么时候继承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会为你做这个,但如果你可以避免它更好).