私は他の多くのクラスのスーパークラスであるクラスを持っています。 。サブクラスは特定のメソッドをオーバーライドしている場合、私は、私はクラスメソッドでこれを実現しようとしたPythonのサブクラスでメソッドのオーバーロードを検出する方法は?
私のスーパークラスののinit()に(知っていただきたいと思いますが、結果は間違っていた:
class Super:
def __init__(self):
if self.method == Super.method:
print 'same'
else:
print 'different'
@classmethod
def method(cls):
pass
class Sub1(Super):
def method(self):
print 'hi'
class Sub2(Super):
pass
Super() # should be same
Sub1() # should be different
Sub2() # should be same
>>> same
>>> different
>>> different
は、サブクラスはメソッドをオーバーライドしているかどうかを知るには、スーパークラスのための方法はありますか?
でしたなぜあなたはそれをしたいのですか? – NPE
すぐに気になることはありませんが、メソッドにdocstringを含めると、メソッドがオーバーライドされたときに上書きされます。したがって、MyClass.methodname .__ doc__でそれを追跡することができます。しかし、私はこの解決策が非常にハックになることを知っているので、私は答えとして投稿していません。 – inspectorG4dget
基本的に私はスーパークラスにこれらのメソッドを「パス」として定義し、別個のメソッド(実際には__init__)これらの関数を呼び出します。関数を開始したり終了したりすると言っているprintステートメントをinitに入れたいのですが、その関数がまだnullの場合、これらのステートメントは不調に見えるので、それらを取り除きたいと思います。 – Brian