【发布时间】:2020-10-24 06:05:17
【问题描述】:
这个问题是针对 python 3 的。假设我有一个像这样的类层次结构
class Base():
def calculate():
return 0
class Derived1(Base):
def calculate():
# some calculation
class Derived2(Base):
def calculate():
# some calculation
现在,我要做的是创建一个类,它定义了从派生类继承的通用方式,然后覆盖计算。换句话说,本着 C++ 模板的精神,避免复制子类代码,而是指定一种通用的子类化方式,然后能够将子类定义为一个衬垫,如下所示:
# pseudocode
class GenericDerived5(someGenericBase):
def calculate():
return super().calculate() + 5
class GenericDerived6(someGenericBase):
def calculate():
return super().calculate() + 5
class Derived5_1 = GenericDerived5(Derived1)
class Derived6_1 = GenericDerived6(Derived2)
(计算不是字面上这样,只是说明了继承结构的组合性质) 这段代码会是什么样子,我需要 python3 的相关工具是什么?我听说过元类,但不是很熟悉。
【问题讨论】:
-
你能澄清你想要做什么吗?您显然已经知道类定义和继承,为什么不使用此工具解决问题?
class Derived5_1(GenericDerived5, Derived1)应该做你想做的事,并且几乎是逐字逐句的。 -
我在问题中所说的:“从派生类继承的通用方法”。与其明确指定基类和派生类的所有组合,不如定义一种通用的继承方式,可能使用类型,然后将类定义为单行。
-
我不了解您的要求如何与 mixins 冲突。多重继承也是一行代码。如前所述,它与伪代码几乎一字不差。您能否澄清一下您还需要什么,或者 mixins 与您想要的具体有什么冲突?
标签: python python-3.x inheritance generic-programming metaclass