''' 在字符串拼接的时候,字符串可以直接相加,那么自定义的类可以实现吗? ''' ''' # def __add__(self, other):方法使用举例 # ''' class Retangle(): def __init__(self,chang,kuan): self.chang = chang self.kuan = kuan def area(self): return self.chang*self.kuan def __add__(self, other): add_chang = self.chang + other.chang add_kuan = self.kuan + other.kuan return add_chang,add_kuan b = Retangle(2,3) #可以理解为self.chang与self.kuan d = Retangle(3,4) #可以理解为后面传进来的other.chang与other.kuan print(b+c) #结果为(5,7),使用加号的话,便会默认使用__add__方法 c = b.area() print(c) # ------------魔术方法之运算方法------------------------- ''' __add__(self,other) #x+y __sub__(self,other) #x-y __mul__(self,other) #x*y __mod__(self,other) #x%y __iadd__(self,other) #x+=y __isub__(self,other) #x-=y __radd__(self,other) #y+x __rsub__(self,other) #y-x __imul__(self,other) #x*=y __imod__(self,other) #x%=y ''' # -------------了解__repr__方法---------------------- class A(): def __init__(self,name): self.name = name def __repr__(self): return "123" #注意必须是返回值形式,必须是字符串. a = A("戴维") #自动调用__repr__方法,将repr返回值赋给a print(a) #之前没有__repr__方法时,a是一个实例对象:<__main__.A object at 0x7f6a722db5c0>,现在是:123,将返回值输出. # -------------了解__str__方法---------------------- class B(): def __init__(self): pass def __str__(self): return "str的返回值" b = B() #自动调用__str__方法,将__str__方法返回值赋给b print(b) #str的返回值 # #---------两个方法在类中一起出现,了解优先级------------------ class C(): def __str__(self): return "我是str的返回值" def __repr__(self): return "我是repr的返回值" c = C() print(c) #我是str的返回值,__str__方法优先于__repr__方法. # -----------------类的实例的调用-------------------- ''' 类的实例可以像函数一样去调用吗?可以.使用__call__方法 ''' class Solve(): def __init__(self,name): self.name = name def __call__(self, *args, **kwargs): return "1234" #一般在用的时候会将类中其他方法的输出以返回值形式返回出去,这样在实例调用时,便可以直接使用. s = Solve("David") print(s()) #s()实例的调用:1234 #将计算好的值返回出去 ''' __str__方法及__call__应用 定义正方形类(继承矩形类)。实现类的实例可调用,调用时打印边长; 同时,直接打印类实例时能够打印出实例的面积. ''' class Area(): def __init__(self,chang,kuan): self.chang = chang self.kuan = kuan def __str__(self): #用于实现直接打印实例时,可以打印面积 a = self.kuan*self.chang return str(a) #在第一次写代码时,我写的直接返回a,结果报错提示,a时int型,不是str型,因此将它转换. def __call__(self, *args, **kwargs): #用于实现类的实例调用时,打印边长 return self.chang s = Area(12,12) print(s) #144 print(s()) #实现了类实例调用时,输出边长