已读56%
预计阅读本页时间:-
预计阅读本页时间:-
7.4 类方法
类方法是直接绑定到类而非它的实例的方法:
>>> class Pizza(object):
... radius = 42
... @classmethod
... def get_radius(cls):
... return cls.radius
...
>>> Pizza.get_radius
<bound method type.get_radius of <class '__main__.Pizza'>>
>>> Pizza().get_radius
<bound method type.get_radius of <class '__main__.Pizza'>>
>>> Pizza.get_radius is Pizza().get_radius
True
>>> Pizza.get_radius()
42
然而,如果选择访问这个方法,它总是会被绑定在它所附着的类上,而且它的第一个参数将是类本身。(记住,类也是对象。)
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
类方法对于创建工厂方法最有用,即以特定方式实例化对象。如果用@staticmethod代替,则不得不在方法中硬编码类名Pizza,使所有继承自Pizza的类都无法根据它们的需要使用这个工厂。
class Pizza(object):
def __init__(self, ingredients):
self.ingredients = ingredients
@classmethod
def from_fridge(cls, fridge):
return cls(fridge.get_cheese() + fridge.get_vegetables())
在这个例子中,提供了工厂方法from_fridge,可以传入一个Fridge对象。如果像Pizza.from_fridge(myfridge)这样调用这个方法,它会返回一个根据myfridge中可用的材料做成的全新Pizza。