【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 ...
随机推荐
- 解决react-router 的activeClassName 首页重复匹配问题
首先先看一下我的inedx.js入口文件: 这是未点击的时候index默认的是选中状态, 这是我点击其他的路由之后:,明显index路由重复了,仔细看了官方文档之后,发现其实Navlink也应该使用e ...
- thinkphp3.2 实现二级导航和高亮显示
一.控制器代码如下: public function index(){ //高亮显示 $action = CONTROLLER_NAME."/".ACTION_NAME; $thi ...
- WP8.1学习系列(第二十章)——添加控件和处理事件
先决条件 添加控件 设置控件的名称 设置控件属性 创建事件处理程序 新控件 总结 相关主题 通过使用如按钮.文本框和组合框等控件,你可以创建应用的 UI. 下面将显示如何将控件添加到应用.处理控件时, ...
- 《征服C指针》读书笔记
本文同时发布在我的个人博客上,欢迎访问~ www.seekingdream.cn 在读完K&R之后,对C的认识就是指针.数组.网上的人们对指针也有些“敬而远之”的感觉.最近从同学处淘得< ...
- Visual Studio for Mac离线安装教程
Visual Studio for Mac离线安装教程 可以在线安装,也可以离线安装(本次安装博主使用离线,在线安装失败了) 据说翻个墙就可以,有条件的就翻吧 没条件的我于是选择离线安装………… 离线 ...
- Elasticsearch学习之深入搜索二 --- 搜索底层原理剖析
1. 普通match如何转换为term+should { "match": { "title": "java elasticsearch"} ...
- 持续集成环境--Tomcat热部署导致线程泄漏
一.问题由来 我们组用jenkins部署了持续集成环境,(jenkins部署war包到远程服务器的tomcat). 每次提交了代码,jenkins上一键构建,就可以自动拉取最新代码,打war包,热部署 ...
- ELK系列一:ELK的安装
一.Elasticsearch.Kibana.Logstash.Elasticsearch-head的安装 ELK的安装 安装下载地址: https://www.elastic.co/cn/downl ...
- 关于ASP.NET Web API的ModelBinding杂谈
由于客户端调用Web API传递的数据属性命名一般偏向javascript规范,只是简单的大小写差异没有问题,但始终会有一些特殊情况.比如OAuth的请求: client_id : "val ...
- Java虚拟机八 分析Java堆
常见的内存溢出的原因及其解决思路 1.堆溢出: 由于大量的对象都直接分配在堆上,因此它最有可能发生溢出.因为大量对象占据了堆空间,而这些对象都持有强引用,导致无法回收,当对象大小之和大于堆空间时就会发 ...