【发布时间】:2017-10-23 14:29:31
【问题描述】:
如果我选择在 Python 中使用 classmethod 而不是 Inheritance,我会遇到哪些主要问题?一个 (愚蠢的) 示例是:
class Pizza(object):
def __init__(self, ingredients):
self.ingredients = ingredients
self.cooked = False
def cook(self):
print "cooking"
self.cooked = True
# A pepperoni pizza using a factory method
@classmethod
def Pepperoni(cls):
return cls("pepperoni")
# An onion pizza inheriting from Pizza base class
class Onion(Pizza):
def __init__(self):
ingredient = "onion"
super(Onion, self).__init__(ingredient)
我知道
- 我无法(轻松)向 Pepperoni 添加自定义方法
- 我无法将 Pizza 设为抽象基类
还有什么?
【问题讨论】:
-
披萨不就是在上面加了一些配料,为什么一定要抽象呢?意大利辣香肠披萨与洋葱披萨或加了意大利辣香肠的洋葱披萨有何不同?!
-
即类方法与继承完全服务于不同的目的。
-
请在比萨上了解技术,这只是一个例子
-
好的,如果它们完全用于不同的目的,你能指出主要区别是什么吗?我可以创建一个
Pizza.Pepperoni()和一个Onion(),这两个对象将具有相同的方法和属性 -
为什么类方法必须返回同一类的实例/类,这是完全错误的。你在这里取得了什么成就?
标签: python python-2.7 inheritance abstract-class class-method