【问题标题】:How to access string value from new class that inherit string type如何从继承字符串类型的新类中访问字符串值
【发布时间】:2010-02-16 07:23:36
【问题描述】:

我想定义一个继承str类型的新类,并创建一个复制字符串内容的方法。

如何访问分配给我的新类对象的字符串值?

    class str_usr(str):
        def __new__(cls, arg):
            return str.__new__(cls, arg)
        def dub(self):
            # How to modify the string value in self ?
            self.<attr> = self.<attr> + self.<attr>

感谢您的帮助:-)

【问题讨论】:

    标签: python oop class


    【解决方案1】:

    Python 中的字符串是不可变的,所以一旦你有了一个字符串,你就不能改变它的值。这几乎就像你有一个从int 派生的类,然后你添加了一个方法来更改int 的值。

    你当然可以返回一个新值:

    class str_usr(str):
        def dup(self):
            return self + self # or 2 * self
    
    s = str_usr("hi")
    print s # prints hi
    print s.dup() # print hihi
    

    【讨论】:

    • 谢谢,这回答了我的问题。但是,从您和 Mike Grahams 的回答中,我可以看出我的想法不是一个好的通用方法。
    【解决方案2】:

    看起来您根本不想从str 继承(无论如何这几乎没有用处)。创建一个新类并使其属性之一成为您访问的字符串,即

    class MyString(object):
        def __init__(self, string):
            self.string = string
    
        def dup(self):
            self.string *= 2
    

    另外,请注意:

    • 使用CamelCaseCapitalization 为您的课程命名,以便人们识别它们是课程。 str 和其他一些内置函数不遵循这一点,但每个人的用户定义的类都遵循。
    • 您通常不需要定义__new__。定义__init__ 可能会起作用。他们定义__new__ 的方式并不是特别有用。
    • 要为字符串添加新功能,您可能不需要类;您可能只想定义接受字符串的函数。

    【讨论】:

    • 感谢您的详尽回答。
    【解决方案3】:

    请注意,在 Python 中,您可以只对字符串使用乘法运算符:

    >>> s = "foo"
    >>> s*2
    'foofoo'
    

    【讨论】:

    • 啊,我只是看到 Alok 已经提到了这一点......好吧,无论如何我都会留下我的答案,以强调在这种情况下子类化是过度工程/混淆。
    • 您的回答很好,因为它提到 OP 可能不需要子类化。不过,我们不知道他想对他的子类做什么。
    猜你喜欢
    • 2012-01-13
    • 2019-07-13
    • 2012-08-21
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多