一部の組み込みのPythonタイプをカスタムタイプに置き換えることは可能ですか?
次のようなものを作成したい:
class MyInt(object):
...
__builtin__.int = MyInt
x = 5
リテラルを入力したときに作成される型をオーバーライドできるかどうかを尋ねているようです。答えはいいえだ。x = 5
ビルトインタイプ以外のタイプを使用するようにすることはできませんint
。
You can override __builtin__.int
, but that will only affect explicit use of the name int
, e.g., when you do int("5")
. There's little point to doing this; it's better to just use your regular class and do MyInt("5")
.
More importantly, you can provide operator overloading on your classes so that, for instance, MyInt(5) + 5
works and returns another MyInt. You'd do this by writing an __add__
method for your MyInt class (along with __sub__
for subtraction, etc.).
ビルトインを置き換えることについてはわかりませんが、ビルトインを継承したり、ビルトインのように動作したりするオブジェクトを作成することはできます。次のようなものを検索すると、inherit from immutable
のオーバーライドを示す回答が見つかるはずです__new__
。後者のオプションについては、「数値タイプのエミュレート」を参照してください。
Pythonesque DSLを作成するため、次の2つのオプションがあります。
ASTを入手したら、先に進んで直接実行できます。いずれの場合も、ASTの生成と操作についてはPythonの言語サービスを参照してください。