已读55%
预计阅读本页时间:-
预计阅读本页时间:-
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方法的情况下将无法修改对披萨材料的混合方式。