私はこのような問題に遭遇するたびにPythonで何年ものプログラミング経験を持っていますが、組み込みisinstance関数を使用しています。しかし、私はこれがPythonでこのようなことを行う理想的な方法かどうかは分かりません。派生クラスのインスタンスを処理する慣習的な方法?
私は、私のインスタンスのほとんどが基本クラスを持っています。
class Base():
def a(self):
return 1
次のようになり、わずかに異なるクラス持って、私はまた:今すぐ
class Extended(Base):
def b(self):
return 2
を、のいずれかのインスタンスになり受け取った引数に応じて、追加機能を持っているかもしれない第三のクラスがあります以前のクラス。
class User():
def __init__(self, arg):
... # do some common work
if isinstance(arg, Extended):
...
# define more functionality which will call method 'b'
# at some point during runtime (as event handler or smth)
これは本当にこの簡単な例でPythonで行くためにまたは多分私のような何かにベースのインタフェースを変更することを検討すべきである方法である:
1のに従って、より良いアプローチですclass Base2():
supports_more_func = False
def a(self):
return 1
def b(self):
pass
class Extended2(Base2):
supports_more_func = True
def b(self):
return 2
class User():
def __init__(self, arg):
... # do some common work
if arg.supports_more_func:
...
# define more functionality which will call method 'b'
# at some point during runtime (as event handler or smth)
あなたは男、なぜですか?
ありがとう!私はUIアプリを念頭に置いているということです。 Userクラスでは、 'arg'が拡張されていた場合、画面上にいくつかの追加ウィジェットが表示されるはずです。ユーザーがその別のウィジェットをクリックすると、ユーザーはそのコールをExtendedに転送します。問題は、 'arg'がBaseだった場合、追加のウィジェットが表示されるべきではないので、どのタイプのタイプで作業するかを判断する方法が本当に必要なことです。 面白いのは、 JavaやC++で作業する人はこれを行うでしょうか? –