編集:「アップキャスト」を「ダウンキャスト」に修正しました。
私が作業しているクラスが C++ から来ている場合、Python でダウンキャストを行う最良の方法を見つけようとしています。C++ で次のように定義された 2 つのクラスがあるとします。
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()
Python は Base の関数しか認識していないため、bar() の呼び出しは失敗します。
私の解決策は、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)
...