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
这几个就是魔法方法,分别是大于,小于,大于等于和小于等于。
这几个方法是内置的,直接调用就可以了吗 jump_p 发表于 2020-5-31 16:48
这几个方法是内置的,直接调用就可以了吗
emmmmm
算是吧 qiuyouzhi 发表于 2020-5-31 16:50
emmmmm
算是吧
那这样写有什么意义呢,比如实例化两个对象 a = Word('IloveFishC')b = ('hello') ,那咋比较呢? a > b?
那这几个魔法方法有啥用呢。。。。 本帖最后由 _荟桐_ 于 2020-5-31 16:58 编辑
a=Word("123")
b=Word("123456")
a>b
这样用 jump_p 发表于 2020-5-31 16:54
那这样写有什么意义呢,比如实例化两个对象 a = Word('IloveFishC')b = ('hello') ,那咋比较呢? a >...
就是a > b啊,
你要是不写这几个魔法方法,默认的会报错 qiuyouzhi 发表于 2020-5-31 16:59
就是a > b啊,
你要是不写这几个魔法方法,默认的会报错
哦,我知道了,意思是定义了魔法方法可以直接a>b,而如果直接在shell里a>b就会出现错误,要用len(a)>len(b)才会返回正确值,是吧? 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 是 另一个变量
Twilight6 发表于 2020-5-31 19:26
你类写上了这些魔法方法后就算是重写了,self 是指类的实例other 是 另一个变量
另一个变量,应该是另一个实例吧?(概念我有点乱) jump_p 发表于 2020-5-31 21:21
另一个变量,应该是另一个实例吧?(概念我有点乱)
哈哈哈 我的语言问题 对你简单理解成左右关系就好 Twilight6 发表于 2020-5-31 21:22
哈哈哈 我的语言问题 对你简单理解成左右关系就好
还想问一下魔法方法到底是干啥的。。。为什么要类里面重写,重写的意思是改变魔法方法原来的功能? jump_p 发表于 2020-5-31 22:02
还想问一下魔法方法到底是干啥的。。。为什么要类里面重写,重写的意思是改变魔法方法原来的功能?
对,就是你自己写自己的一种新的东东,自定义自己的代码呗
页:
[1]