我有一些 Python 类,如果简化的话,看起来像:
class base:
def __init__(self, v):
self.value = v
def doThings(self):
print "Doing things."
def doMoreThings(self):
print "Doing more things."
def combine(self, b):
self.value += b.value
class foo(base):
def showValue(self):
print "foo value is %d." % self.value
class bar(base):
def showValue(self):
print "bar value is %d." % self.value
该类base
包含方法(上面由doThings
和表示doMoreThings
),这些方法实现了foo
和bar
子类共有的功能。foo
和bar
子类在解释value
字段的方式上有本质的不同。(上面,它们仅在打印时显示的内容有所不同,但在我的实际应用程序中,它们会做其他一些更复杂的事情。) base
可以被认为是“抽象的”:用户只使用foo
s 和bar
s。 base
仅作为其子类共有的代码的家而存在。
我想问的方法是combine
,它可以让你取其中两个对象并制作第三个。因为foo
和bar
解释value
不同,对不同类型的两个子类没有意义combine
:您可以使用combine
两个foo
s 来获取 afoo
或两个bar
s 来获取 abar
但不能 afoo
和 a bar
。即便如此,所有子类的过程combine
都是相同的,因此将其分解并在一个地方定义是有意义的。
如果用户尝试使用两个不兼容的对象,我可能想发出错误信号combine
,但我看不到在不引入丑陋类型检查的情况下执行此操作的方法。这样做是个好习惯吗?或者我应该做通常的事情而不是检查,记录问题,并假设用户不会尝试以combine
非预期的方式使用,即使这种使用似乎“成功”并返回垃圾对象而不是引发错误?
感谢您的帮助。