编辑:将“upcast”更正为“downcast”。
当我正在使用的类来自 C++ 时,我试图找出在 Python 中进行向下转换的最佳方法。如果我在 C++ 中定义了两个类:
struct Base
{
int foo()
{
return 7;
}
};
struct Derived : Base
{
int bar()
{
return 42;
}
};
还有另一个功能
Base baz()
{
return Derived();
}
如果我尝试使用 Python
der = baz()
print der.foo()
print der.bar()
对 bar() 的调用失败,因为 Python 只知道 Base 中的函数。
我的解决方案是在 Derived 中添加另一个函数:
Derived * fromBase(Base * b)
{
return reinterpret_cast<Derived *>(b);
}
如果我随后将 Python 脚本的第一行更改为 read der = Derived.fromBase(baz())
,则该脚本将按预期工作。
但是,我使用 reinterpret_cast 来完成这项工作的事实似乎非常错误。有没有更好的方法来降低压力,不需要使用像 reinterpret_cast 这样危险的东西?如果没有,退货政策应该fromBase()
是什么?
在任何人问之前,是的,沮丧是必要的。这就是我必须使用的库的工作方式。
编辑:
我正在寻找类似 C# 代码的东西:
Base b = new Derived();
Derived d = b as Derived;
if (d != null)
...