7.3 静态方法

静态方法是属于类的方法,但实际上并非运行在类的实例上。具体见示例7.10.

示例 7.10 @staticmethod的用法

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

class Pizza(object):
  @staticmethod
  def mix_ingredients(x, y):
    return x + y
  def cook(self):
    return self.mix_ingredients(self.cheese, self.vegetables)

如果愿意的话,可以像非静态方法那样写mix_ingredients,它会接收self作为参数但不会真地使用它。装饰器@staticmethod提供了以下几种功能。

 
  • Python不必为我们创建的每个Pizza对象实例化一个绑定方法。绑定方法也是对象,创建它们是有开销的。使用静态方法可以避免这种开销:
  >>> Pizza().cook is Pizza().cook
  False
  >>> Pizza().mix_ingredients is Pizza.mix_ingredients
  True
  >>> Pizza().mix_ingredients is Pizza().mix_ingredients
  True
 
  • 提高代码的可读性。当看到@staticmethod时,就知道这个方法不依赖于对象的状态。
  • 可以在子类中覆盖静态方法。如果使用一个定义在顶层模块中的mix_ingredients函数,那么一个继承自Pizza的子类在不重写cook方法的情况下将无法修改对披萨材料的混合方式。