【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 ...
随机推荐
- JavaWeb学习总结(十七)EL表达式
语法格式: ${expression} 1. 表达式支持算术运算符合逻辑运算符 <%@ page language="java" contentType="text ...
- CentOS7--Firewalld防火墙
Firewalld服务是红帽RHEL7系统中默认的防火墙管理工具,特点是拥有运行时配置与永久配置选项且能够支持动态更新以及"zone"的区域功能概念,使用图形化工具firewall ...
- [Windows] Windows 8.1 取消在任务栏显示应用商店的应用
- 使用API函数EnumWindows()枚举顶层窗口
http://simpleease.blog.163.com/blog/static/1596085820052770290/ 要枚举Windows当前所有打开的顶层窗口,可使用Windows A ...
- 【大数据系列】HDFS安全模式
一.什么是安全模式 安全模式时HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除.修改等变更请求.在NameNode主节点启动时,HDFS首先进入安全模式,DataNod ...
- vue经验 - 实战疑点总结
1.注册全局组件(是一个单vue页面组成的一个组件,而不是现拼的template结构) 结构: 代码:main.js import UserList from './components/UserLi ...
- OAuth网络协议(转)
一.应用场景 为了理解OAuth的适用场合,让我举一个假设的例子. 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来.用户为了使用该服务,必须让"云冲 ...
- CSS3 渐变效果
CSS3 渐变效果 background-image: -moz-linear-gradient(top, #8fa1ff, #3757fa); /* Firefox */ background-im ...
- ASP.NET使用百度编辑器(UEditor)使用方法
ASP.NET使用百度编辑器(UEditor)方法如下 第一步到百度官网下载百度编辑器 http://ueditor.baidu.com/website/download.html 下载.net版本 ...
- jquery validator
jQuery.validate是一款非常不错的表单验证工具,简单易上手,而且能达到很好的体验效果,虽然说在项目中早已用过,但看到这篇文章写得还是不错的,转载下与大家共同分享. 一.用前必备 官方网站: ...