2012-02-09 4 views
4

特別なタイプの文字列である新しいクラスを作成したいと思います。私はそれがstrクラスのすべてのメソッドを継承したい、しかし私はそれが使用できる追加のパラメータを渡すことができるようにしたい。このようなもの:追加のパラメータを取るためにstrクラスを拡張する

class URIString(str, ns = namespace): # ns defaults to global variable namespace 
    def getLocalName(self): 
     return self[(self.find(ns)+len(ns)):] # self should still act like a string 
     # return everything in the string after the namespace 

私は構文が正しくないことを知っています。しかし、うまくいけば、それは私が逃げようとしているという考えを伝えます。あなたはこのような何かをしたいと思う

+0

継承の方法については、チュートリアルを使用する必要があります。 Stackoverflowは人々を手渡しするためのものではありません。 – Marcin

+9

@Marcin:彼の防衛の中で、strから継承する方法は明白ではありません。 –

+5

@Marcin:あなたは一日中Stackoverflowに関する初心者の質問をしていますか? –

答えて

7

class URIString(str): 
    _default_namespace = "default" 

    def __init__(self, value, namespace=_default_namespace): 
     self.namespace = namespace 

    def __new__(cls, value, namespace=_default_namespace): 
     return super().__new__(cls, value)  

    @property 
    def local_name(self): 
     return self[(self.find(self.namespace)+len(self.namespace)):] 

私は属性local_namegetLocalName()をオンにする@propertyデコレータを使用していた - Pythonで、ゲッター/セッターは悪い習慣と考えられています。

pre-Python 3.xでは、super(URIString, cls).__new__(cls, value)を使用する必要があります。

+1

このコードを試しましたか?少なくとも3つの問題があります。 –

+0

@NedBatchelder私はまだ私の答えをコンパイルしている間、私は事故で提出した、私はテスト後に更新されます。 –

+0

私たちは行く、修正されました。私が最初に投稿したとき、それはちょうど私の頭の上にあったので、最初の不正確さを許してください。 –

関連する問題