ビルトインクラスのモンキーパッチを使用できますか?そうでない場合、2つの異なるクラスの加算を定義するために演算子をオーバーロードするにはどうすればよいですか?

ジョンギャレットウィリアムソン:

最初に、これは特定の結果を得る方法についての問題ではなく、Pythonの内部動作についての問題です。私はプログラミングにかなり慣れていないので、用語を間違って使用していないか教えてください。私の仮説はかなり初歩的なエラーを中心にしています。私は走ろうとします:

"My age is " + 46

明らかに、これは「 'int'オブジェクトを暗黙的にstrに変換できない」エラーを発生させます。文字列を整数に追加する定義はありませんが、作成できますか?

私の最初の質問は、これが文字列や整数のような組み込みクラスで可能かどうかです。私は周りを見回しましたが、そうではないと思いますが、誰かが方法を知っていれば、興味があります。

私の2番目の質問は、すべての点で文字列と整数のように動作するが、組み込みではない2つの新しいクラスを定義する場合、2つのクラスの追加を定義できますか?同じクラスの追加を定義できることはわかっていますが、2つの異なるクラスについてはどうですか?

最後に、追加(それが直接文字列と整数、または文字列と整数のような2つのクラスであるかどうか)は、整数を文字列に変換してから追加することにより、「私の年齢は46歳」になります。

前もって感謝します!

ADdV:

最初の質問については、組み込みクラスを変更することは基本的に不可能です。他のクラスをいじくることはできます、それは一般的にひどい考えです。代わりに、必要なプロパティを持つサブクラスを作成できます。

例えば:

class mystr(str):
    def __add__(self, other):
       return mystr(str(self) + str(other))

このコードは、変更するプロパティstr、つまり追加動作を除いてクラスからすべてのプロパティを継承しますにキャストselfするstrことで、引き続きstrの追加に委任しますが、他の引数もキャストして、str説明した動作を取得します。

編集:最後に、にキャストバックしmystrて、で終了しないようにしstrます。

これで、次のことができます。

>>> some_string = mystr("abc")
>>> some_string + 4
"abc4"

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ