私はそこにたくさんの同様の質問があることを知っています。しかし、私の質問は異なります。 オーバーライドできないメソッドを作りたくありません。 新しく作成したクラスを保護して、誤って何かを上書きしないようにします。
プレフィックスとしてアンダースコアを使用するのはかなり良いですが、すぐに多くのアンダースコアを持つ多くのメソッドを取得します。継承されたクラスのどこかで、祖先のクラスメソッドをオーバーライドします。
私が本当に欲しいのは、これと同じくらい単純なものです。
class Cat(Mammal):
def walk(self):
if ancestor_has_function('walk'):
parent.walk();
do_something_here();
Catの祖先(哺乳類、動物、またはLifeFormのいずれか)のいずれかに「歩行」メソッドがある場合は、最初に親メソッドを実行する必要があります。
Pythonでこれを行う可能性はありますか?
編集: 例えば、これは私が良いと思った答えの履歴書です。これが他の人に役立つことを願っています:
class Animal(object):
pass
#def walk(self):
# print('animal walk')
class Mammal(Animal):
def walk(self):
if hasattr(super(Mammal, self), 'walk') and callable(super(Mammal,self).walk):
super(Mammal, self).walk()
print('mammal walk')
class Cat(Mammal):
def walk(self):
super(Cat, self).walk()
print('cat walk')
if __name__ == '__main__':
cat = Cat()
cat.walk()
そしてここに出力があります:
哺乳類の散歩
キャットウォーク
動物の歩行方法のコメントを外してみてください。そうすれば、それも機能するようになります。