鱼C论坛

 找回密码
 立即注册
查看: 645|回复: 12

[已解决]43讲动动手

[复制链接]
发表于 2020-5-31 16:12:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1590912614(1).jpg
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)
这几个是重写的意思吗?运行后到底是怎么比较两个字符串的。。。
最佳答案
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 是 另一个变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 16:24:24 | 显示全部楼层
这几个就是魔法方法,分别是大于,小于,大于等于和小于等于。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-31 16:48:34 | 显示全部楼层
qiuyouzhi 发表于 2020-5-31 16:24
这几个就是魔法方法,分别是大于,小于,大于等于和小于等于。

这几个方法是内置的,直接调用就可以了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-31 16:50:06 | 显示全部楼层
jump_p 发表于 2020-5-31 16:48
这几个方法是内置的,直接调用就可以了吗

emmmmm
算是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-31 16:54:05 | 显示全部楼层

那这样写有什么意义呢,比如实例化两个对象 a = Word('IloveFishC')  b = ('hello') ,那咋比较呢? a > b?
那这几个魔法方法有啥用呢。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-31 16:54:52 | 显示全部楼层
本帖最后由 _荟桐_ 于 2020-5-31 16:58 编辑

a=Word("123")
b=Word("123456")
a>b
这样用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是a > b啊,
你要是不写这几个魔法方法,默认的会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-31 17:03:24 | 显示全部楼层
qiuyouzhi 发表于 2020-5-31 16:59
就是a > b啊,
你要是不写这几个魔法方法,默认的会报错

哦,我知道了,意思是定义了魔法方法可以直接a>b,而如果直接在shell里a>b就会出现错误,要用len(a)>len(b)才会返回正确值,是吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 是 另一个变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-31 21:21:05 | 显示全部楼层
Twilight6 发表于 2020-5-31 19:26
你类写上了这些魔法方法后就算是重写了,self 是指类的实例  other 是 另一个变量

另一个变量,应该是另一个实例吧?(概念我有点乱)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-31 21:22:26 | 显示全部楼层
jump_p 发表于 2020-5-31 21:21
另一个变量,应该是另一个实例吧?(概念我有点乱)

哈哈哈 我的语言问题   对  你简单理解成左右关系就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-31 22:02:58 | 显示全部楼层
Twilight6 发表于 2020-5-31 21:22
哈哈哈 我的语言问题   对  你简单理解成左右关系就好

还想问一下魔法方法到底是干啥的。。。为什么要类里面重写,重写的意思是改变魔法方法原来的功能?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对,就是你自己写自己的一种新的东东,自定义自己的代码呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 22:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表