6

追加の属性を持つ文字列が必要です。たとえば、赤または緑で印刷するかどうかを考えてみましょう。

Subclassing(str) は不変であるため、機能しません。値はわかりますが、煩わしい場合があります。

多重継承は役に立ちますか? 私はそれを使用したことはありません。

オブジェクトのみを継承し、self.value=str を使用すると、すべての文字列性メッセージ (ストリップなど) を自分で実装する必要があります。

または、Ruby の missing_method のように転送する方法はありますか?

インスタンスによってインデックス付けされたクラスレベルの辞書を使用して色を保存するとうまくいくと思います。あまりにも醜いです?

4

5 に答える 5

6

たとえば、非常に古いバージョンの Python を使用していない限り、str を継承できます。

>>> class A(str):
...    def __new__(cls, color, *args, **kwargs):
...        newobj = str.__new__(cls, *args, **kwargs)
...        newobj.color = color
...        return newobj
>>> a = A("#fff", "horse")
>>> a.color
'#fff'
>>> a
'horse'
>>> a.startswith("h")
True
于 2009-05-04T16:38:51.607 に答える
2
import UserString
class mystr(UserString.MutableString):
   ...

通常、不変の文字列とそのサブクラスを使用するのが最善ですが、変更可能な文字列が必要な場合は、これが最も簡単な方法です。

于 2009-05-04T16:39:07.283 に答える
1

おそらく、文字列を含むカスタム クラスの方がより適切な方法です。すべての文字列メソッドを基になる文字列に渡す必要がありますか? プロパティを介して文字列を公開し、クラスの消費者が好きなことを何でもできるようにしてみませんか?

于 2009-05-04T16:13:22.557 に答える
0

PyPIstringlikeでモジュールを使用してみることができます。ここに例があります。

于 2012-08-03T18:38:05.443 に答える
0

文字列のすべてのメソッドが必要なので、文字列を拡張して詳細を追加します。では、文字列が不変の場合はどうなるでしょうか? クラスも不変にするだけです。とにかく新しいオブジェクトを作成しているので、それが変更可能なオブジェクトであると誤って混乱することはありません。

または、Python にある場合は、文字列の変更可能なバリアントを拡張します。そのような構造が存在するかどうかを知るには、Python に精通していません。

于 2009-05-04T16:17:39.223 に答える