【发布时间】:2016-09-19 16:21:11
【问题描述】:
我想定义一个与其父级同名的函数,它返回一个父级可以接收和使用的值。虽然我认为可以通过元类来实现这一点,但我不确定如何做到这一点(假设有可能)以及是否有更好、更清洁的解决方案。
我想要的格式如下所示。 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 -
如果你在一个同名的子类中定义了一个方法,那么根据定义你覆盖了父方法。我很确定你想做的事情是不可能的,而且无论如何都是个坏主意。我建议您在父级中有
f调用一些抽象方法g,子级负责覆盖。 -
请注意,它只是
return super().f(a)。
标签: python python-3.x inheritance python-3.5 metaclass