扩展str类以获取其他参数

时间:2012-02-09 20:42:49

标签: python string class extend

我想创建一个特殊类型字符串的新类。我希望它继承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

我知道语法不对。但希望它传达了我想要的想法。

1 个答案:

答案 0 :(得分: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)):]

我使用@property装饰器将getLocalName()转换为属性local_name - 在python中,getter / setter被视为不良做法。

请注意,在Python 3.x之前,您需要使用super(URIString, cls).__new__(cls, value)