python-3.x 如何重载add运算符以返回两个字符串相加时的长度?

uxh89sit  于 2022-12-01  发布在  Python
关注(0)|答案(1)|浏览(147)

我试图创建一个行为类似于str的类diffStr,不同之处在于,当用户试图将两个字符串相加或相乘时,输出分别是每个相加或相乘的字符串的长度。
我的密码-

class diffStr:

  def __init__(self, str1):
    self.str1 = str1

  def __add__(self, other):
   return len(self.str1) + len(other.str1)
  
  def __mul__(self, other):
    return len(self.str1) * len(other.str1)

x = diffStr('hi')
print(x+'hello') # supposed to print 7 (2+5)
print(x*'hello') # supposed to print 10 (2*5)

我确信我做错了什么,因为当我尝试运行代码时,我一直收到以下错误消息-
AttributeError: 'str' object has no attribute 'str1'
正如你可能会告诉,我是一个新手在编程和我最好的学习。我会感谢任何帮助,在修复这一块代码。谢谢。

fhg3lkii

fhg3lkii1#

对于x+'hello',您将'hello'str对象作为other参数传递给x.__add__x.__add__将计算other.str1,由于str对象没有str1属性,因此会得到上述异常。
有一种更全面的方法可以帮助+*运算符同时适用于strdiffStr操作数,即为diffStr实现__len__方法,这样您就可以简单地对other参数调用len函数,而不管其类型如何:

class diffStr:
    def __init__(self, str1):
        self.str1 = str1

    def __add__(self, other):
        return len(self.str1) + len(other)

    def __mul__(self, other):
        return len(self.str1) * len(other)

    def __len__(self):
        return len(self.str1)

x = diffStr('hi')
print(x + 'hello')
print(x * 'hello')
print(x + diffStr('hello'))
print(x * diffStr('hello'))

这将输出:

7
10
7
10

相关问题