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 11 >>> rect=Rectangle(3,4) 12 >>> rect.getPeri() 13 14 14 >>> rect.getArea() 15 12 16 >>> class A: 17 def __init__(self): 18 return "A fo A-Cup" 19 20 21 >>> a=A() #由于定义了A有返回值了,所以会报错。init无返回值 22 Traceback (most recent call last): 23 File "<pyshell#37>", line 1, in <module> 24 a=A() 25 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('123') 15 >>> a 16 123 17 >>> b=int('456') 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 8 >>> a=New_int(3) 9 >>> b=New_int(5) 10 >>> a+b #a+b自动调用__add__方法中的 11 -2 12 >>> a-b 13 8 14 >>> class Try_int(int): 15 def __add__(self,other): 16 return self+other 17 def __sub__(self,other): 18 return self-other 19 20 21 >>> a=Try_int(3) 22 >>> b=Try_int(5) 23 >>> a+b 24 下方一连串报错。原因是,a+b,调用__add__函数,self绑定a进来,other代表b。而相当于加法,又进来__add__方法,进来有是加法,然后又递归。 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 33 >>> b=Try_int(5) 34 >>> a=Try_int(3) 35 >>> a+b 36 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 7 >>> a=Nint(3) 8 >>> b=Nint(5) 9 >>> a+b 10 8 11 >>> 1+b #执行反运算(sub中self取的b值,other取 的1 5-1=4) 12 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+b(self代表b=5,other代表1,1-5=-4) 11 -4 12 #增量赋值运算 13 >>> a=a+b
#一元操作符
参照书611页