第47页 | Python高手之路 | 阅读 ‧ 电子书库

同步阅读进度,多语言翻译,过滤屏幕蓝光,评论分享,更多完整功能,更好读书体验,试试 阅读 ‧ 电子书库

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。

请支持我们,让我们可以支付服务器费用。
使用微信支付打赏


上一页 · 目录下一页


下载 · 书页 · 阅读 ‧ 电子书库