文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
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。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论