簡略化すると、次のような 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
表されている) が含まれています。とサブクラスは、フィールドの解釈方法が本質的に異なります。(上記では、印刷時に表示される内容のみが異なりますが、実際のアプリケーションでは、より複雑な他のいくつかのことを実行します。) 「抽象的」と考えることができます。ユーザーはs とs のみを操作します。 サブクラスに共通するコードのホームとしてのみ存在します。doThings
doMoreThings
foo
bar
foo
bar
value
base
foo
bar
base
私が質問したい方法はcombine
、これらのオブジェクトを 2 つ取り、3 番目のオブジェクトを作成する方法です。foo
と のbar
解釈が異なるため、異なる型の2つのサブクラスにはvalue
意味がありません。それでも、 の手順はすべてのサブクラスで同じであるため、分解して 1 か所で定義することは理にかなっています。combine
combine
foo
foo
bar
bar
foo
bar
combine
ユーザーが 2 つの互換性のないオブジェクトを使用しようとした場合、おそらくエラーを通知したいと思いcombine
ますが、醜い型チェックを導入せずにこれを行う方法がわかりません。これを行うのは良い習慣ですか?または、チェックせずに通常のことを行い、問題を文書化し、ユーザーがcombine
意図しない方法で使用しようとしないと想定する必要があります。そのような使用が「成功」してガベージオブジェクトを返すように見えてもエラーを発生させる代わりに?
ご協力ありがとうございました。