在执行Python类定义之前修改输入

时间:2018-01-25 18:55:08

标签: python class

我还在学习Python类的工作原理。这是我的示例代码:

class StringPopped(str):
    def __init__(self, input):
        super().__init__()
        self.output = input[:-1]

str1 = StringPopped('Alice')

然后>>> str1的输出为Alicestr1.outputAlic。如何使str1str1.output具有相同的结果?

我尝试了__repr__,但这只会改变显示的内容,而不会改变str1的实际价值。有没有办法发表像self = self.output这样的陈述?

1 个答案:

答案 0 :(得分:1)

字符串是不可变的。我猜您必须使用__new__,而不是__init__来解决此问题:

>>> class StringPopped(str):
...     def __new__(cls, val):
...         return super().__new__(cls, val[:-1])
...     
>>> s = StringPopped('Alice')
>>> s
'Alic'
>>> type(s)
__main__.StringPopped