看了魔法函数,有一点疑问。1中需要用self.word才能执行,而2直接用self就可以执行。而1中Word继承了int基本类型,但在__new__时并没有什么卵用。当用
Word(“123”)来实例化时,看到的运算结果是以字符串形式来进行运算的,比如“123”*3=123123123。
1.
class Word(int): def __new__(cls, word): word = int(word) return int.__new__(cls,word) def __init__(self,word): self.word = word def __add__(self, other): return self.word+other def __sub__(self,other): return self.word-other def __mul__(self, other): return self.word*other def __div__(self, other): return sself.word/other def main(): a=Word(123) b=Word(12) print a-b if __name__ == '__main__': main()
2.
class Word(str): def __new__(cls, word): word = word.replace(" ","") return str.__new__(cls,word) def __init__(self,word): self.word = 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 __eq__(self, other): return len(self)==len(other) def main(): a=Word("foorrrdd") b=Word("sswwss") print a==b if __name__ == '__main__': main()