Monsterccc 发表于 2020-8-2 20:51:58

课后作业43

class Word(str):
    def __new__(cls, word):
      if ' ' in word:
            print "Value contains spaces. Truncating to first space."
            word = word[:word.index(' ')] #单词是第一个空格之前的所有字符
      return str.__new__(cls, word)

    def __gt__(self, other):
      return len(self) > len(other)
    def __lt__(self, other):
      return len(self) < len(other)
    def __ge__(self, other):
      return len(self) >= len(other)
    def __le__(self, other):
      return len(self) <= len(other)

class Word(str):
    def __lt__(self, other):    #小于
      return len(self.split()) < len(other.split())

    def __gt__(self, other):    #大于
      return len(self.split()) > len(other.split())

    def __eq__(self, other):    #等于
      return len(self.split()) == len(other.split())

我这样不用__new__方法也是可以实现加分要求的,看起来好像是可以的,不知道有没有什么问题。还有既然是比较字符串的长度为什么不能等于呀?怎么会不符合逻辑?

zltzlt 发表于 2020-8-2 20:53:00

1. 当传入的参数有空格,两个代码就有区别了
2. 既然是比较字符串的长度为什么不能等于呀
什么意思?

Monsterccc 发表于 2020-8-2 20:55:55

zltzlt 发表于 2020-8-2 20:53
1. 当传入的参数有空格,两个代码就有区别了
2.
什么意思?

注意,我们没有定义 __eq__ 和 __ne__ 方法。这是因为将会产生一些怪异不符合逻辑的结果(比如 Word('FishC') 会等于 Word('Apple'))。他是这样说的。
第二个传入有空格的参数,比较的也是空格前的字符串长度呀。

永恒的蓝色梦想 发表于 2020-8-2 20:58:45

Monsterccc 发表于 2020-8-2 20:55
注意,我们没有定义 __eq__ 和 __ne__ 方法。这是因为将会产生一些怪异不符合逻辑的结果(比如 Word('Fis ...

功能全靠你自己说了算,你要是不想听小甲鱼的也可以……

Monsterccc 发表于 2020-8-2 20:59:42

永恒的蓝色梦想 发表于 2020-8-2 20:58
功能全靠你自己说了算,你要是不想听小甲鱼的也可以……

好吧,那第一个问题呢?

永恒的蓝色梦想 发表于 2020-8-2 21:00:34

Monsterccc 发表于 2020-8-2 20:59
好吧,那第一个问题呢?

不会出什么问题,但是每次都 split 效率会很低。

Monsterccc 发表于 2020-8-2 21:02:38

永恒的蓝色梦想 发表于 2020-8-2 21:00
不会出什么问题,但是每次都 split 效率会很低。

哦 哦,那我在一开始用__init__初始化这两个参数效果跟__new__是不是一样的呀?

永恒的蓝色梦想 发表于 2020-8-2 21:05:34

Monsterccc 发表于 2020-8-2 21:02
哦 哦,那我在一开始用__init__初始化这两个参数效果跟__new__是不是一样的呀?

不一样,__init__ 不会有任何效果。

Monsterccc 发表于 2020-8-2 21:11:58

永恒的蓝色梦想 发表于 2020-8-2 21:05
不一样,__init__ 不会有任何效果。

也就是说__init__初始化过的参数传入不到下面的方法里对吧。{:10_272:}

永恒的蓝色梦想 发表于 2020-8-2 22:01:15

Monsterccc 发表于 2020-8-2 21:11
也就是说__init__初始化过的参数传入不到下面的方法里对吧。

对。
页: [1]
查看完整版本: 课后作业43