0

replace文字列に含まれるすべてのメソッド ( 、など)を作成したクラスを提供したいと考えていますisupper。以下にコード例を示します。

>>> class MyClass(str):
...     def __init__(self, string):
...         self.string = string
...     def __str__(self):
...         return self.string
...
>>> MyClass("aaa").replace("a", "$")
'$$$'
>>>

これは、私が望むとおりに機能します。ただし、から継承する方法について少し混乱していますstr。上記のように行うか、次のようにします。

class MyClass(__builtins__.str):
    ...

あるいは:

import types
class MyClass(types.__builtins__["str"]):

要約すると、私の質問は次のとおりです。継承する最良の方法は何strですか(またはその点で他の組み込み)?私はそれを与えましたか、それとも私が考えていないより良い方法がありますか.

ありがとう。

4

2 に答える 2

1

絶対に触れないでください__builtins__実装の詳細です。紛らわしいほど似た名前の__builtin__モジュールのドキュメントを引用します。

CPython 実装の詳細: ほとんどのモジュールには__builtins__、グローバルの一部として使用できる名前 (「s」に注意) があります。の値__builtins__は通常、このモジュールまたはこのモジュールのdict属性の値です。これは実装の詳細であるため、Python の代替実装では使用されない場合があります。

から継承するだけstrです。そうしない理由はありません。他の名前を使用することは、より速くも明確でもありません。

于 2013-08-09T15:00:35.567 に答える