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

Python 类:添加len()的替代方法,python,string,operator-overloading,Python,String,Operator Overloading,我正在构建一个字符串类,其行为类似于常规字符串类,只是加法运算符返回两个字符串的长度之和,而不是将它们串联起来。然后乘法运算符返回两个字符串长度的乘积。所以我打算 class myStr(string): def __add__(self): return len(string) + len (input) 至少这是我第一部分的内容,但这显然是不正确的。有人能帮我更正吗。您需要从str派生,并且可以使用len(self)来获取当前实例的长度。您

我正在构建一个字符串类,其行为类似于常规字符串类,只是加法运算符返回两个字符串的长度之和,而不是将它们串联起来。然后乘法运算符返回两个字符串长度的乘积。所以我打算

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

至少这是我第一部分的内容,但这显然是不正确的。有人能帮我更正吗。

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

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


string
不是类。这不是什么。除非定义
string
,否则
len(string)
不会在上下文中起作用

其次,
\uuuuuuuuuuuuuuuu
没有
输入
参数

您需要解决这两个问题


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

请始终发布代码给出的完整错误。为什么要这样做?那是一个非常奇怪的设计。一个对象有一个字符串,并以各种方式使用它,甚至将一些方法直接委托给字符串……这还不算太糟糕。但是,一个对象是一个字符串,但却以非字符串的方式执行一些操作,这会让人感到困惑。另外,请注意,一旦你做对了,
myStr('abc')+'def'
将是6,但是
'abc'+myStr('def')
将是
'abcdef'
。更糟糕的是,
s=myStr('abc');s+=myStr('def')
s
设置为6。这真的是你想要的吗?@abarnert这是家庭作业。同一位用户还有其他类似类型的家庭作业问题。@Marcin:我开始怀疑她需要一位更好的教授(或导师或其他什么)。任何想做这项作业的人要么是故意想迷惑他的学生,要么是因为60年代的LDS^H^H^HLOOPS太多而感到困惑…
string
是。你不需要
str.\uu len_u(self)
super
len(self)
工作正常。(他没有覆盖
\uuu len\uuu
,因此
myStr.\uuu len\uuu
的方法与
str.\uuu len\uuu
完全相同)
>>> class myStr(str):
...     def __add__(self, other):
...         return len(self) + len(other)
... 
>>> foo = myStr('foo')
>>> foo
'foo'
>>> foo + 'bar'
6