jump_p 发表于 2020-5-31 16:12:31

43讲动动手



class Word(str):
'''存储单词的类,定义比较单词的几种方法'''

    def __new__(cls, word):
      # 注意我们必须要用到 __new__ 方法,因为 str 是不可变类型
      # 所以我们必须在创建的时候将它初始化
      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)


这段代码最后的
def __gt__(self, other)   
def __lt__(self, other)
def __ge__(self, other)
def __le__(self, other)
这几个是重写的意思吗?运行后到底是怎么比较两个字符串的。。。

qiuyouzhi 发表于 2020-5-31 16:24:24

这几个就是魔法方法,分别是大于,小于,大于等于和小于等于。

jump_p 发表于 2020-5-31 16:48:34

qiuyouzhi 发表于 2020-5-31 16:24
这几个就是魔法方法,分别是大于,小于,大于等于和小于等于。

这几个方法是内置的,直接调用就可以了吗

qiuyouzhi 发表于 2020-5-31 16:50:06

jump_p 发表于 2020-5-31 16:48
这几个方法是内置的,直接调用就可以了吗

emmmmm
算是吧

jump_p 发表于 2020-5-31 16:54:05

qiuyouzhi 发表于 2020-5-31 16:50
emmmmm
算是吧

那这样写有什么意义呢,比如实例化两个对象 a = Word('IloveFishC')b = ('hello') ,那咋比较呢? a > b?
那这几个魔法方法有啥用呢。。。。

_荟桐_ 发表于 2020-5-31 16:54:52

本帖最后由 _荟桐_ 于 2020-5-31 16:58 编辑

a=Word("123")
b=Word("123456")
a>b
这样用

qiuyouzhi 发表于 2020-5-31 16:59:02

jump_p 发表于 2020-5-31 16:54
那这样写有什么意义呢,比如实例化两个对象 a = Word('IloveFishC')b = ('hello') ,那咋比较呢? a >...

就是a > b啊,
你要是不写这几个魔法方法,默认的会报错

jump_p 发表于 2020-5-31 17:03:24

qiuyouzhi 发表于 2020-5-31 16:59
就是a > b啊,
你要是不写这几个魔法方法,默认的会报错

哦,我知道了,意思是定义了魔法方法可以直接a>b,而如果直接在shell里a>b就会出现错误,要用len(a)>len(b)才会返回正确值,是吧?

Twilight6 发表于 2020-5-31 19:26:19

jump_p 发表于 2020-5-31 17:03
哦,我知道了,意思是定义了魔法方法可以直接a>b,而如果直接在shell里a>b就会出现错误,要用len(a)>len(b ...

def __gt__(self, other)   
def __lt__(self, other)
def __ge__(self, other)
def __le__(self, other)
这几个是重写的意思吗?运行后到底是怎么比较两个字符串的。。。

你类写上了这些魔法方法后就算是重写了,self 是指类的实例other 是 另一个变量

jump_p 发表于 2020-5-31 21:21:05

Twilight6 发表于 2020-5-31 19:26
你类写上了这些魔法方法后就算是重写了,self 是指类的实例other 是 另一个变量

另一个变量,应该是另一个实例吧?(概念我有点乱)

Twilight6 发表于 2020-5-31 21:22:26

jump_p 发表于 2020-5-31 21:21
另一个变量,应该是另一个实例吧?(概念我有点乱)

哈哈哈 我的语言问题   对你简单理解成左右关系就好

jump_p 发表于 2020-5-31 22:02:58

Twilight6 发表于 2020-5-31 21:22
哈哈哈 我的语言问题   对你简单理解成左右关系就好

还想问一下魔法方法到底是干啥的。。。为什么要类里面重写,重写的意思是改变魔法方法原来的功能?

Twilight6 发表于 2020-5-31 22:04:48

jump_p 发表于 2020-5-31 22:02
还想问一下魔法方法到底是干啥的。。。为什么要类里面重写,重写的意思是改变魔法方法原来的功能?

对,就是你自己写自己的一种新的东东,自定义自己的代码呗
页: [1]
查看完整版本: 43讲动动手