我有一些 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可以被认为是“抽象的”:用户只使用foos 和bars。 base仅作为其子类共有的代码的家而存在。
我想问的方法是combine,它可以让你取其中两个对象并制作第三个。因为foo和bar解释value不同,对不同类型的两个子类没有意义combine:您可以使用combine两个foos 来获取 afoo或两个bars 来获取 abar但不能 afoo和 a bar。即便如此,所有子类的过程combine都是相同的,因此将其分解并在一个地方定义是有意义的。
如果用户尝试使用两个不兼容的对象,我可能想发出错误信号combine,但我看不到在不引入丑陋类型检查的情况下执行此操作的方法。这样做是个好习惯吗?或者我应该做通常的事情而不是检查,记录问题,并假设用户不会尝试以combine非预期的方式使用,即使这种使用似乎“成功”并返回垃圾对象而不是引发错误?
感谢您的帮助。