【Pyton】【小甲鱼】魔法方法
1.__init__
- >>> class Rectangle:
- def __init__(self,x,y):
- self.x=x
- self.y=y
- def getPeri(self):
- return(self.x+self.y)*2
- def getArea(self):
- return self.x*self.y
- >>> rect=Rectangle(3,4)
- >>> rect.getPeri()
- 14
- >>> rect.getArea()
- 12
- >>> class A:
- def __init__(self):
- return "A fo A-Cup"
- >>> a=A() #由于定义了A有返回值了,所以会报错。init无返回值
- Traceback (most recent call last):
- File "<pyshell#37>", line 1, in <module>
- a=A()
- TypeError: __init__() should return None, not 'str'
2.__new__(cls[,])
- >>> class CapStr(str):
- def __new__(cls,string): #传入str化身为string
- string=string.upper() #string转换为为大写字符串
- return str.__new__(cls,string)#返回的时候必须重写new方法,否则则会自动调用capstr函数
- >>> a=CapStr("I love fishC.com!")
- >>> a
- 'I LOVE FISHC.COM!'
3.__del__(self):当对象将要被销毁的时候,此方法就会被调用
- >>> class C:
- def __init__(self):
- print("我是__init__方法,我被调用了...")
- def __del__(self):
- print("我是__del__方法,我被调用了...")
- >>> c1=C()
- 我是__init__方法,我被调用了...
- >>> c2=c1
- >>> c3=c2
- >>> del c3
- >>> del c2
- >>> del c1 #只有删除了所有引用方法C的对象后,才启动垃圾回收机制,垃圾回收机制在销毁对象的时候,会自动调用del方法,对其中的内容进行垃圾回收,才会打印出来回收的内容。
- 我是__del__方法,我被调用了...
二、算数运算
1.因为python万物皆对象,所以对象中的内容也是可以相加的。
- >>> type(len)
- <class 'builtin_function_or_method'>
- >>> type(dir)
- <class 'builtin_function_or_method'>
- >>> type(int)
- <class 'type'>
- >>> type(list)
- <class 'type'>
- >>> class C:
- pass
- >>> type(C)
- <class 'type'>
- >>> a=int('')
- >>> a
- 123
- >>> b=int('')
- >>> a+b
- 579
2.魔法函数实例
- >>> class New_int(int):
- def __add__(self,other):
- return int.__sub__(self,other)
- def __sub__(self,other):
- return int.__add__(self,other)
- >>> a=New_int(3)
- >>> b=New_int(5)
- >>> a+b #a+b自动调用__add__方法中的
- -2
- >>> a-b
- 8
- >>> class Try_int(int):
- def __add__(self,other):
- return self+other
- def __sub__(self,other):
- return self-other
- >>> a=Try_int(3)
- >>> b=Try_int(5)
- >>> a+b
- 下方一连串报错。原因是,a+b,调用__add__函数,self绑定a进来,other代表b。而相当于加法,又进来__add__方法,进来有是加法,然后又递归。
- 25
- #下面让a+b后不报错
- >>> class Try_int(int):
- def __add__(self,other):
- return int(self)+int(other)
- def __sub__(self,other):
- return int(self)-int(other)
- >>> b=Try_int(5)
- >>> a=Try_int(3)
- >>> a+b
- 8 #由于上面定义的__add__方法中返回一个整型,__sub__方法中返回一个整型,所以可以相加成一个整型数据。
3.魔法函数含义:
4.divmod(a,b):返回的值是一个元祖:(a//b,a%b)
5.__lshift__(self,other):按位左移。这个魔法方法代表的数是二进制数组成的,例如3==00000011,按位左移一位就是00000110
三、反运算符
- #__add__方法前带r,代表add的反运算符,例如 a+b,处于add两项中的前一项a为主动一方,b为被动一方,所以当add前者a有值的时候,直接进入add运算,如果a娶不到值的时候执行反运算,也就是radd中的函数。
- class Nint(int):
- def __radd__(self,other):
- return int.__sub__(self,other)
- >>> a=Nint(3)
- >>> b=Nint(5)
- >>> a+b
- 8
- >>> 1+b #执行反运算(sub中self取的b值,other取 的1 5-1=4)
- 4
- >>> 1-b------#思考为什么=-4
- -4
- >>> 1+b
- 4
- >>> class Nint(int):
- def __radd__(self,other):
- return int.__sub__(other,self) #括号中的顺序为减法顺序other-self
- >>> b=Nint(5)
- >>> 1+b(self代表b=5,other代表1,1-5=-4)
- -4
- #增量赋值运算
- >>> a=a+b
- #一元操作符
参照书611页
【Pyton】【小甲鱼】魔法方法的更多相关文章
- 【Pyton】【小甲鱼】类和对象
一.类 定义一个类,例子如下: class Turtle: #定义一个名为Turtle的类,Python中类型约定以大写字母开头 #属性 color='green' weight=10 legs=4 ...
- 【Pyton】【小甲鱼】异常处理:你不可能总是对的
Exception 1.assertionerror举例 >>> my_list=['小甲鱼是帅哥'] >>> assert len(my_list)>0 & ...
- 【Pyton】【小甲鱼】文件
1.打开文件的集中模式: 2.文件对象方法: 对于文件对象方法的练习代码: 读取F:\\script\\script.txt位置文件中内容 >>> f=open('F:\\scrip ...
- 【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
pickle(泡菜): picking:将对象转换为二进制 unpicking:将二进制转换为对象 1 >>> import pickle 2 #picking:对象导入到文件中(二 ...
- 小甲鱼Python3笔记
000-愉快的开始 入门容易,学习难,代码量少. 跨平台: Windows, Mac OS, Linux, UNIX. 应用领域: 操作系统 WEB 3D动画 企业应用 云计算等等. 001-我和Py ...
- 零基础学习python_魔法方法(41-48课)(迭代器)
接下来这个为啥要叫魔法方法呢,额,这个嘛我是跟小甲鱼的视频取的名字一样的,因为会讲比较多杂的东西,有... 魔法方法详细阅读地址:http://bbs.fishc.com/thread-48793-1 ...
- 小甲鱼Python笔记(类)
类和对象 类的构造方法 def __init__(): 1 class People: 2 def __init__(self,name): 3 self.name = name 注意:在构造方法中的 ...
- 【转】Python 魔法方法大全
转载自鱼C论坛:http://bbs.fishc.org/thread-48793-1-2.html 据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Pyt ...
- 小甲鱼零基础入门学习python--课后作业
[小甲鱼零基础入门学习python--课后作业] 小甲鱼零基础入门学习python--课后作业 本章内容: 1.基础部分的作业 2.函数部分的作业 3.字典.集合.文件部分作业 4.异常 5.Easy ...
随机推荐
- 如何使用 SSH 连接 VMWare 虚拟机中的 Ubuntu
环境:VMWare Player 5.0.2,Ubuntu 13.10 VMWare共有3种网络连接模式,分别是: 1. bridged(桥接模式):虚拟机将直接连接到物理局域网,使自身独立于宿主机 ...
- js for循环与for in循环的区别
for循环可一遍历数组,而for in循环可以遍历数组和对象 使用for in循环会将Array当成对象遍历,而Array的存取速度明显比Object要快.所以使用for循环遍历数组比for in循环 ...
- CWnd与HWND的区别与转换
CWnd与HWND的区别与转换 2011-10-20 10:29:30| 分类: VC学习库|字号 订阅 一.区别HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是 ...
- 【LeetCode OJ】Remove Element
题目:Given an array and a value, remove all instances of that value in place and return the new length ...
- Andoid数据存储之SQLite数据库
SQLite是一个嵌入式的并且是一个轻量级的数据库: SQLite数据库支持大部分SQL语法, 允许使用SQL语句操作数据库, 其本质是一个文件, 不需要安装启动: SQLite数据库打开只是打开了一 ...
- delphixe10 android操作 打电话,摄像头,定位等
XE6 不支持JStringToString.StringTojString.StrToJURI:use Androidapi.Helpers //Splash Image Delphi XE5,XE ...
- Linux下安装PHP 5.4.3(以Apache为WebServer)
转载http://www.cnblogs.com/rainisic/archive/2012/05/23/Apache_PHP_Install.html 下载PHP 官方下载:http://www.p ...
- c++ 友元类 与 友元类派生类
定义: 当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问.我们就把类B叫做类A的友元. 用法: 在A类中加入: friend class B; 下面这个程序说明 ...
- 七、K3 WISE 开发插件《Update字段级更新触发器 - BOS单审核后反写源单》
审核成功触发,是一个比较典型的场景.需要用到update触发器,跟踪到审核状态的变化. 引用的源码<采购检验单审核后反写收料通知单>,其中采购检验单是BOS自定义单据. if (objec ...
- JS-几大排序算法(更新中...)
关于排序都会讲的名词:(我自己的理解) 时间复杂度: 指排序过程中,程序消耗的时间. 空间复杂度: 指排序过程中,程序所消耗内存的大小. 稳定: 如果两个值相等,a和b,a=b且a在b位置的左边,排序 ...