类:添加len()的替代方法

时间:2013-06-05 21:55:36

标签: python string operator-overloading

我正在构建一个字符串Class,其行为类似于常规字符串类,除了add运算符返回两个字符串的长度之和而不是连接它们。然后乘法运算符返回两个字符串长度的乘积。所以我打算做

   class myStr(string):
         def __add__(self):
             return len(string) + len (input)

至少这是我对第一部分的看法,但这显然是不正确的。有人可以帮我纠正吗。

2 个答案:

答案 0 :(得分:4)

您需要从str派生,并且可以使用len(self)来获取当前实例的长度。您还需要为__add__运算符的另一个操作数提供+参数。

class myStr(str):
    def __add__(self, other):
        return len(self) + len(other)

演示:

>>> class myStr(str):
...     def __add__(self, other):
...         return len(self) + len(other)
... 
>>> foo = myStr('foo')
>>> foo
'foo'
>>> foo + 'bar'
6

答案 1 :(得分:1)

string不是一个班级。这不是什么*。除非您定义len(string),否则string无效。

其次,__add__没有input参数。

您需要解决这两个问题。

*您可以导入一个名为string的模块,但它不是仅存在于全局范围内的模块。