-魔法方法总是被双下划线包围,例如__init__-
-魔法方法是面向对象的python的一切。如果你不知道魔法方法,说明你还没能意识到面向对象的Python的强大-
-魔法方法的“魔力”体现在他们总能够在适当的时候呗调用-
第一课笔记
- __ init__ (self[,参数1,参数2…])
系统默认初始化为0(基本数据类型)或是空(指针数据类型),但是我们想要自己定义一个想要的初始值,这个时候就要重写或者自定义init方法。
#用户输入长宽求长方形的面积和周长
class Rectangle:
def __init__(self,x,y):#这里我想要初始的长宽参数
self.x = x
self.y = y
def mianji(self):
return self.x*self.y
def zhouchang(self):
return 2*(self.x+self.y)
try:
a=int(input('请输入长方形的长'))
b=int(input('请输入长方形的宽'))
bob = Rectangle(a, b)
print('该长方形的面积是%d'%bob.mianji())
print('该长方形周长是%d'%bob.zhouchang())
except:
print('输入数值类型错误')
- __new __(cls[,…])
new()方法是在类准备将自身实例化时调用。
一个类可以有多个位置参数和多个命名参数,而在实例化开始之后,在调用 init()方法之前,Python首先调用new()方法。
class C(str):#继承str方法,str这个class没法修改
def __new__(cls, string):#用new重新定义
string=string.upper()#重新定义,再调用时将str转为大写
return str.__new__(cls,string)
a=C('Iloveyou')
print(a)
结果如下
ILOVEYOU
3.__del __(self)
如果说init和new方法是python对象的构造器的话,那del就是析构器(释放空间)
第二课笔记
所谓的工厂函数(BIF)实际就是类对象
Python还提供了对自定义对象数值处理
电梯直达> Python 魔法方法详解
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(5)
b=new_int(9)
print(a+b)
print(a-b)
结果加减方法调换了
-4
14
反运算
class new_int(int):
def __radd__(self, other):
return int.__sub__(self,other)#将加法换成减法
a=new_int(5)
b=new_int(9)
print(a+b)
print(5+b)#当左操作数不支持相应的操作时被调用,这时+左侧是常数5,调用后面b的radd方法
结果
14
4
增量赋值运算
a+=1>>a=a+1
a+=b>>a=a+b
上面左侧的为增量赋值
一元操作符