親が受け取って使用できる値を返す親と同じ名前の関数を定義したいと思います。メタクラスでこれを達成することは可能かもしれないと思うが、どうすればそうすることができるか(可能であると仮定して)、より良い、よりクリーンなソリューションがあるかどうかはわからない。親関数をオーバーライドしないでスーパークラスに値を返すにはどうすればよいですか?
私の希望するフォーマットを以下に示します。 Child
クラスは、自分以外の開発者によって定義されるため、できるだけ制限を少なくしたいと思います。たとえば、super(Child).f(a)
をreturn a
の代わりに使用しないのが理想的です。また、私のモデルでキーワード引数を使用する方法もわかります。
class Parent:
def f(self, arg):
print("Received {}.".format(arg))
return arg ** 3
class Child(Parent):
def f(self, c, b, a):
print(a, b, c)
return a
# Prints "2 1 0" and "Received 2.". Sets value to 8.
value = Child().f(0, 1, 2)
python 2.7と3.4で '2 1 0'を表示 – csl
同じ名前のサブクラスでメソッドを定義すると、定義によって親メソッドがオーバーライドされます。私はあなたがしたいことは不可能で、とにかく悪いアイデアになるだろうと確信しています。私はあなたが親コールに 'f'を持っていることをお勧めします。これは子がオーバーライドの責任を負う抽象メソッド' g'です。 –
'super()。f(a)'だけであることに注意してください。 – jonrsharpe