杨东明 发表于 2021-7-18 11:18:00

请问这道题为啥报错?

class Nstr:
    def __sub__(self, other):
      content = ''.join(self.split(other))
      return content
a = Nstr('I love FishC.com!iiiiiiii')
b = Nstr('i')
print (a - b)




报错为:Traceback (most recent call last):
File "D:/python project/第四十二节课/定义类,支持字符串相减.py", line 10, in <module>
    a = Nstr('I love FishC.com!iiiiiiii')
TypeError: Nstr() takes no arguments

阿奇_o 发表于 2021-7-18 11:18:01

本帖最后由 阿奇_o 于 2021-7-18 12:13 编辑

1. 你没定义,没 "重写"__init__() ,故 在构造该类对象时,不接受任何参数 takes no arguments

2. 也不一定要重写__init__,因为若你继承了 str, 即 写 class Nstr(str): ...
   那么 构造对象时,会调用父类str的__init__()生成字符串对象。
    有了字符串对象,即 self, 就可以调用 .split()方法,进而实现 __sub__ 字符串相减的操作。

杨东明 发表于 2021-7-18 11:18:34

题目是:0. 我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常。因此,现在我们要求定义一个 Nstr 类,支持字符串的相减操作:A – B,从 A 中去除所有 B 的子字符串。

逃兵 发表于 2021-7-18 11:20:06

继承str
class Nstr(str):
    def __sub__(self, other):
      content = ''.join(self.split(other))
      return content
a = Nstr('I love FishC.com!iiiiiiii')
b = Nstr('i')
print (a - b)

杨东明 发表于 2021-7-18 16:29:00

阿奇_o 发表于 2021-7-18 11:18
1. 你没定义,没 "重写"__init__() ,故 在构造该类对象时,不接受任何参数 takes no arguments

2. 也不 ...

感谢{:9_231:}

杨东明 发表于 2021-7-18 16:44:57

逃兵 发表于 2021-7-18 11:20
继承str

感谢{:9_231:}
页: [1]
查看完整版本: 请问这道题为啥报错?