python魔法函数的一些疑问

看了魔法函数,有一点疑问。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()
时间: 2024-11-06 12:32:23

python魔法函数的一些疑问的相关文章

python魔法函数之__getitem__

魔法函数会增强python类的类型,独立存在 class Company: def __init__(self, employees): self.employees = employees def __getitem__(self, item): return self.employees[item] company = Company(['a', 'b', 'c']) for val in company: print(val) company1 = company[:2] for val

魔法函数

1.什么是魔法函数 在python中,有的名称以双下划线开头同时以双下划线结尾这种形式,我们只知道它是python自己定义的,同时我们也不应该去定义类似的函数. 我们将“__init__”这种形式的函数成为魔法函数."__init__"是构造器,用来初始化对象.魔法函数不需要去显式的调用,同时魔法函数不能自定义.魔法函数会被python隐式的去被调用. 举个简单的例子:现在我们需要遍历对象中的属性,传统做法是取属性然后去遍历. class Person(object): def __i

python内置函数和魔法函数

内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str方法等等. init(self, …):初始化对象class,在创建新对象时调用.在方法里,可以初始化该对象的属性,否则调用其他时可能出“现has no attribute”错误: del(self):释放对象,在对象被虚拟机删除之前调用: new(cls,*args,**kwd):实例的生成操作,

Python的魔法函数系列 __getattrbute__和__getattr__

  #!/usr/bin/env python # -*- coding: utf-8 -*- import sys __metaclass__ = type """ __getattr__ 和 __getattribute__ 的区别 """ class ClassName: def __init__(self, name, info={}): self.name = name self.info = info # def __getattri

gj3 Python数据模型(魔法函数)

3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __init__(self, employee_list): self.employee = employee_list # 可迭代 def __getitem__(self, item): return self.employee[item] # 长度,实现了len函数 def __len__(self

如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline

如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the accuracy of knn and find the k which makes the biggest accuracy k_range=list(range(1,26))#[1,25] scores=[] for k in k_range: knn=KNeighborsClassifier(n_

python的魔法函数

hello, 大家好, 今天给大家分享一点python的魔法函数,即Python中自带双下划线的函数,虽然在大规模的软件开发中大家用的不多,当然除非你想被打(可以秀(装逼)一下), 虽然使用的不多, 但是要是能数量的运用它们的话, 没有点功力基础也是相当困难的, 正所谓没有扎实的基本功,即便南拳北腿,降龙十八掌,九阴白骨爪,乾坤大挪移全部了然于心,照样是花拳绣腿,百无一用 所以还是老老实实的把自己的基本功练好,面向对象玩的炉火纯青,其他的不过是稍加训练,跟卖艺的学几招也能称霸一片天.哈哈 牛吹的

Python魔法

一.什么是Python魔法 Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来编写相同功能的程序(还有函数式.声明式等).Python的多范式依赖于Python对象中的特殊方法(special method). 特殊方法名的前后各有两个下划线.特殊方法又被称为魔法方法(magic method).定义了许多Python语法和表达方式,正如我们在下面的例子中将要看到的.当对象中定义了特殊方

009_python魔法函数

11. (译)Python魔法方法指南 原文: http://www.rafekettler.com/magicmethods.html 原作者: Rafe Kettler 翻译: hit9 原版(英文版) Repo: https://github.com/RafeKettler/magicmethods Contents (译)Python魔法方法指南 简介 构造方法 操作符 比较操作符 数值操作符 一元操作符 常见算数操作符 反射算数运算符 增强赋值运算符 类型转换操作符 类的表示 访问控制