扩展 str 类以获取附加参数

发布于 2025-01-03 18:25:23 字数 392 浏览 1 评论 0原文

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

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

I want to create a new class that is a special type of string. I want it to inherit all the methods of the str class, but I want to be able to pass it an additional parameter that it can use. Something like this:

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

I know the syntax isn't right. But hopefully it conveys the idea that I'm trying to get at.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦回旧景 2025-01-10 18:25:24

你可能想做这样的事情:

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)。

You would want to do something like this:

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)):]

I have used the @property decorator to turn getLocalName() into the attribute local_name - in python, getters/setters are considered bad practice.

Note that pre-Python 3.x, you need to use super(URIString, cls).__new__(cls, value).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文