【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 ...
随机推荐
- 使用es6使数组的第一项和最后一项就行调换
let arr = [1, 2, 3,4]; let a = arr.filter((item, index) => { return index > 0 && index ...
- Xcode 插件集:xTextHandler
本文转载至 http://www.tuicool.com/articles/zIFvQn7 基于 Xcode Source Editor Extension 做了一个插件集,叫做 xTextHandl ...
- 在iOS中使用icon font
博文转载至 http://www.cocoachina.com/industry/20131111/7327.html 在开发阿里数据iOS版客户端的时候,由于项目进度很紧,项目里的所有图标都是用最平 ...
- Struts2(三)配置详解
一.概述 Struts2提供了多种可选的配置文件形式. 其中,struts-default.xml和default.properties是框架级别的配置文件,这两个文件在Struts的核心JAR包中, ...
- luanet分布式lua框架
luanet最初只是一个网络框架,它简单的封装了一些网络相关接口然后暴露到lua中,让lua可以构建简单的网络应用. 随着我的手游服务器的开发,我发现在C语言中要实现一个简洁易用的RPC调用接口并不容 ...
- 【转载】C#调用C++ DLL
using System; using System.Collections.Generic; using System.Linq; using System.Text; //1. 打开项目“Tzb” ...
- 链表的基础题目学习(EPI)
链表的题目总体来说细节比较多,因为链表的题目在操作链表的过程中本身有些复杂,所以如果链表作为编程题出现的时候,多数情况下题目本身的思路可能不是很复杂,不要把题目往复杂的方向去思考就好了~这里的链表只是 ...
- Android按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- [工具] CintaNotes
CintaNotes是一款非常轻巧实用的笔记软件,可看作EverNote轻量级替代品.CintaNotes只需1个exe,体积仅1MB,却拥有 EverNote易于收集.实时搜索.条状排列.tag分类 ...
- thinkCMF----如何写标签
ThinkCMF写标签的地方: