1.__init__

  1. >>> class Rectangle:
  2. def __init__(self,x,y):
  3. self.x=x
  4. self.y=y
  5. def getPeri(self):
  6. return(self.x+self.y)*2
  7. def getArea(self):
  8. return self.x*self.y
  9.  
  10. >>> rect=Rectangle(3,4)
  11. >>> rect.getPeri()
  12. 14
  13. >>> rect.getArea()
  14. 12
  15. >>> class A:
  16. def __init__(self):
  17. return "A fo A-Cup"
  18.  
  19. >>> a=A() #由于定义了A有返回值了,所以会报错。init无返回值
  20. Traceback (most recent call last):
  21. File "<pyshell#37>", line 1, in <module>
  22. a=A()
  23. TypeError: __init__() should return None, not 'str'

2.__new__(cls[,])

  1. >>> class CapStr(str):
  2. def __new__(cls,string): #传入str化身为string
  3. string=string.upper() #string转换为为大写字符串
  4. return str.__new__(cls,string)#返回的时候必须重写new方法,否则则会自动调用capstr函数
  5. >>> a=CapStr("I love fishC.com!")
  6. >>> a
  7. 'I LOVE FISHC.COM!'

3.__del__(self):当对象将要被销毁的时候,此方法就会被调用

  1. >>> class C:
  2. def __init__(self):
  3. print("我是__init__方法,我被调用了...")
  4. def __del__(self):
  5. print("我是__del__方法,我被调用了...")
  6.  
  7. >>> c1=C()
  8. 我是__init__方法,我被调用了...
  9. >>> c2=c1
  10. >>> c3=c2
  11. >>> del c3
  12. >>> del c2
  13. >>> del c1 #只有删除了所有引用方法C的对象后,才启动垃圾回收机制,垃圾回收机制在销毁对象的时候,会自动调用del方法,对其中的内容进行垃圾回收,才会打印出来回收的内容。
  14. 我是__del__方法,我被调用了...

二、算数运算

1.因为python万物皆对象,所以对象中的内容也是可以相加的。

  1. >>> type(len)
  2. <class 'builtin_function_or_method'>
  3. >>> type(dir)
  4. <class 'builtin_function_or_method'>
  5. >>> type(int)
  6. <class 'type'>
  7. >>> type(list)
  8. <class 'type'>
  9. >>> class C:
  10. pass
  11.  
  12. >>> type(C)
  13. <class 'type'>
  14. >>> a=int('')
  15. >>> a
  16. 123
  17. >>> b=int('')
  18. >>> a+b
  19. 579

2.魔法函数实例

  1. >>> class New_int(int):
  2. def __add__(self,other):
  3. return int.__sub__(self,other)
  4. def __sub__(self,other):
  5. return int.__add__(self,other)
  6.  
  7. >>> a=New_int(3)
  8. >>> b=New_int(5)
  9. >>> a+b #a+b自动调用__add__方法中的
  10. -2
  11. >>> a-b
  12. 8
  13. >>> class Try_int(int):
  14. def __add__(self,other):
  15. return self+other
  16. def __sub__(self,other):
  17. return self-other
  18.  
  19. >>> a=Try_int(3)
  20. >>> b=Try_int(5)
  21. >>> a+b
  22. 下方一连串报错。原因是,a+b,调用__add__函数,self绑定a进来,other代表b。而相当于加法,又进来__add__方法,进来有是加法,然后又递归。
  23. 25
  24.  
  25. #下面让a+b后不报错
  26. >>> class Try_int(int):
  27. def __add__(self,other):
  28. return int(self)+int(other)
  29. def __sub__(self,other):
  30. return int(self)-int(other)
  31.  
  32. >>> b=Try_int(5)
  33. >>> a=Try_int(3)
  34. >>> a+b
  35. 8 #由于上面定义的__add__方法中返回一个整型,__sub__方法中返回一个整型,所以可以相加成一个整型数据。

3.魔法函数含义:

4.divmod(a,b):返回的值是一个元祖:(a//b,a%b)

5.__lshift__(self,other):按位左移。这个魔法方法代表的数是二进制数组成的,例如3==00000011,按位左移一位就是00000110

三、反运算符

  1. #__add__方法前带r,代表add的反运算符,例如 a+b,处于add两项中的前一项a为主动一方,b为被动一方,所以当add前者a有值的时候,直接进入add运算,如果a娶不到值的时候执行反运算,也就是radd中的函数。
  2. class Nint(int):
  3. def __radd__(self,other):
  4. return int.__sub__(self,other)
  5.  
  6. >>> a=Nint(3)
  7. >>> b=Nint(5)
  8. >>> a+b
  9. 8
  10. >>> 1+b #执行反运算(sub中self取的b值,other取 的1 5-1=4)
  11. 4
  1. >>> 1-b------#思考为什么=-4
  2. -4
  3. >>> 1+b
  4. 4
  5. >>> class Nint(int):
  6. def __radd__(self,other):
  7. return int.__sub__(other,self) #括号中的顺序为减法顺序other-self
  8.  
  9. >>> b=Nint(5)
  10. >>> 1+bself代表b=5,other代表11-5=-4
  11. -4
  12. #增量赋值运算
  13. >>> a=a+b
  1. #一元操作符
    参照书611

【Pyton】【小甲鱼】魔法方法的更多相关文章

  1. 【Pyton】【小甲鱼】类和对象

    一.类 定义一个类,例子如下: class Turtle: #定义一个名为Turtle的类,Python中类型约定以大写字母开头 #属性 color='green' weight=10 legs=4 ...

  2. 【Pyton】【小甲鱼】异常处理:你不可能总是对的

    Exception 1.assertionerror举例 >>> my_list=['小甲鱼是帅哥'] >>> assert len(my_list)>0 & ...

  3. 【Pyton】【小甲鱼】文件

    1.打开文件的集中模式: 2.文件对象方法: 对于文件对象方法的练习代码: 读取F:\\script\\script.txt位置文件中内容 >>> f=open('F:\\scrip ...

  4. 【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜

    pickle(泡菜): picking:将对象转换为二进制 unpicking:将二进制转换为对象 1 >>> import pickle 2 #picking:对象导入到文件中(二 ...

  5. 小甲鱼Python3笔记

    000-愉快的开始 入门容易,学习难,代码量少. 跨平台: Windows, Mac OS, Linux, UNIX. 应用领域: 操作系统 WEB 3D动画 企业应用 云计算等等. 001-我和Py ...

  6. 零基础学习python_魔法方法(41-48课)(迭代器)

    接下来这个为啥要叫魔法方法呢,额,这个嘛我是跟小甲鱼的视频取的名字一样的,因为会讲比较多杂的东西,有... 魔法方法详细阅读地址:http://bbs.fishc.com/thread-48793-1 ...

  7. 小甲鱼Python笔记(类)

    类和对象 类的构造方法 def __init__(): 1 class People: 2 def __init__(self,name): 3 self.name = name 注意:在构造方法中的 ...

  8. 【转】Python 魔法方法大全

    转载自鱼C论坛:http://bbs.fishc.org/thread-48793-1-2.html 据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Pyt ...

  9. 小甲鱼零基础入门学习python--课后作业

    [小甲鱼零基础入门学习python--课后作业] 小甲鱼零基础入门学习python--课后作业 本章内容: 1.基础部分的作业 2.函数部分的作业 3.字典.集合.文件部分作业 4.异常 5.Easy ...

随机推荐

  1. 如何使用 SSH 连接 VMWare 虚拟机中的 Ubuntu

    环境:VMWare Player 5.0.2,Ubuntu 13.10  VMWare共有3种网络连接模式,分别是: 1. bridged(桥接模式):虚拟机将直接连接到物理局域网,使自身独立于宿主机 ...

  2. js for循环与for in循环的区别

    for循环可一遍历数组,而for in循环可以遍历数组和对象 使用for in循环会将Array当成对象遍历,而Array的存取速度明显比Object要快.所以使用for循环遍历数组比for in循环 ...

  3. CWnd与HWND的区别与转换

    CWnd与HWND的区别与转换 2011-10-20 10:29:30|  分类: VC学习库|字号 订阅     一.区别HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是 ...

  4. 【LeetCode OJ】Remove Element

    题目:Given an array and a value, remove all instances of that value in place and return the new length ...

  5. Andoid数据存储之SQLite数据库

    SQLite是一个嵌入式的并且是一个轻量级的数据库: SQLite数据库支持大部分SQL语法, 允许使用SQL语句操作数据库, 其本质是一个文件, 不需要安装启动: SQLite数据库打开只是打开了一 ...

  6. delphixe10 android操作 打电话,摄像头,定位等

    XE6 不支持JStringToString.StringTojString.StrToJURI:use Androidapi.Helpers //Splash Image Delphi XE5,XE ...

  7. Linux下安装PHP 5.4.3(以Apache为WebServer)

    转载http://www.cnblogs.com/rainisic/archive/2012/05/23/Apache_PHP_Install.html 下载PHP 官方下载:http://www.p ...

  8. c++ 友元类 与 友元类派生类

    定义: 当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问.我们就把类B叫做类A的友元. 用法: 在A类中加入: friend class B; 下面这个程序说明 ...

  9. 七、K3 WISE 开发插件《Update字段级更新触发器 - BOS单审核后反写源单》

    审核成功触发,是一个比较典型的场景.需要用到update触发器,跟踪到审核状态的变化. 引用的源码<采购检验单审核后反写收料通知单>,其中采购检验单是BOS自定义单据. if (objec ...

  10. JS-几大排序算法(更新中...)

    关于排序都会讲的名词:(我自己的理解) 时间复杂度: 指排序过程中,程序消耗的时间. 空间复杂度: 指排序过程中,程序所消耗内存的大小. 稳定: 如果两个值相等,a和b,a=b且a在b位置的左边,排序 ...