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

时间:2014-12-10 13:10:39

标签: python

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

class MyClass:

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

  @staticmethod
  def do_something():
    pass

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

1 个答案:

答案 0 :(得分: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

使用:

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

这是一个人为的例子,但您应该考虑您认为应该采取的行为。


你改变班级名称的重构例子也很好;无论何时重命名该类,都不必更新self,而如果您有明确的MyClass引用,则必须全部更新它们(一个好的IDE会为您执行此操作,但是如果您可以避免那更好)。