kevinheros 发表于 2020-6-4 16:44:05

43讲动动手 答案解析

题目:
1. 定义一个单词(Word)类继承自字符串,重写比较操作符(参考自学:Python 魔法方法详解),当两个 Word 类对象进行比较时,根据单词的长度来进行比较大小。

我自己做了2个方案:
方案1:
class Word(str):
    def __new__(cls,arg):
      arg = len(arg.partition(' '))
      return str.__new__(cls,arg)
问题:
只返回第一个单词长度给str类,然后直接用str类的比较方法,自己不再重写比较魔法方法可以吗?
我自己试运行了几个也没有出现问题

方案2:
class Word(str):
   
    def __init__(self,arg):
      self.length = len(arg.partition(' '))
      
    def __lt__(self,other):
      return self.length < other.length
   
    def __le__(self,other):
      return self.length <= other.length
   
    def __eq__(self,other):
      return self.length == other.length
   
    def __ne__(self,other):
      return self.length != other.length
   
    def __gt__(self,other):
      return self.length > other.length
   
    def __ge__(self,other):
      return self.length >= other.length
问题:
只将字符串初始化,返回第一个单词的长度,然后重写比较魔法方法,不在__new__里重载。有什么问题吗?
我试了几次也没出现问题

sunrise085 发表于 2020-6-4 16:44:06

本帖最后由 sunrise085 于 2020-6-4 17:09 编辑

两种方法都能满足题目要求,只是所得到的该类的实例对象不同,小甲鱼的方法得到的是地一个单词,你的方法得到的是输入的整个字符串,例如,str1=Word("How do you do")用小甲鱼的方法得到的str1是"How",用你的方法得到的str1是"How do you do"

jia159753 发表于 2020-6-4 20:49:19

0.0
页: [1]
查看完整版本: 43讲动动手 答案解析