同步阅读进度,多语言翻译,过滤屏幕蓝光,评论分享,更多完整功能,更好读书体验,试试 阅读 ‧ 电子书库
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
然而,如果选择访问这个方法,它总是会被绑定在它所附着的类上,而且它的第一个参数将是类本身。(记住,类也是对象。)
类方法对于创建工厂方法最有用,即以特定方式实例化对象。如果用@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。
请支持我们,让我们可以支付服务器费用。
使用微信支付打赏
