如何在python中实现CRTP功能?

如何在python中实现CRTP功能?,python,c++,crtp,Python,C++,Crtp,我想从python中的基类访问派生类的成员(变量)。在c++中,我可以为此使用CRTP设计模式。例如,在C++中,我会做这样的事情: #包括 模板 阶级基础{ 公众: void get_值() { double value=static\u cast(this)->myvalue; STD::P>也许你应该退后一步,问为什么我们在C++中使用CRTP。CRTP的原因是我们可能希望在编译时使用一个多态的类,或者躲避虚拟函数调用开销。 现在Python没有“编译时”,因为它不是静态类型,所以所有函数

我想从python中的基类访问派生类的成员(变量)。在
c++
中,我可以为此使用CRTP设计模式。例如,在C++中,我会做这样的事情:

#包括
模板
阶级基础{
公众:
void get_值()
{
double value=static\u cast(this)->myvalue;

STD::P>也许你应该退后一步,问为什么我们在C++中使用CRTP。CRTP的原因是我们可能希望在编译时使用一个多态的类,或者躲避虚拟函数调用开销。 现在Python没有“编译时”,因为它不是静态类型,所以所有函数调用本质上都是虚拟的。因此,您将获得与CRTP相同的行为,只需使用常规继承即可

class Base(object):
    def get_value(self):
        print("This is the derived value:", self.value)

class Derived(Base):
    def __init__(self, value):
        self.value = value

d = Derived(5)
d.get_value() # prints "This is the derived value: 5"


另一方面,如果您希望CRTP与Python3
键入系统进行交互,那么您可能需要检查这个问题:

我不确定它是否是您要查找的,但是只要
子类
有一个属性,即使它没有在
基类
中定义,也可以通过呃,就是这个例子

class Base(object):
    def getValue(self):
        print(self.myvalue)



class Derived(Base):
    def __init__(self, myvalue):
        self.myvalue = myvalue



val = 3
derived = Derived(3)
derived.getValue()
#>3

在OP的例子中,“self.value”是在“派生”中定义的,因此基类不知道它。感谢您花时间提供额外的解释。我需要self.value位于派生类上,而不存在于基类上。