Python面向对象编程(5)——类的特殊方法

    xiaoxiao2021-03-25  63

    类的特殊方法 1 深入理解类      类本质上也是一个对象,只是其拥有创建自身实例的能力      类可以与变量进行绑定,并且可以为类增加属性      可以把类作为函数的参数传递 2 元类      类的创建和管理者(type),所有的类都是元类的实例 isinstance(Empty,type)查看Empty是否是type的实例 类实例化过程:__new__()、__init__() class testCustom:     def __init__(self):         print("Init method...")     def __new__(cls,*args,**kwargs):         print("New method...")         return object.__new__(cls,*args,**kwargs) testCustom() 自定义元类 目的:可以对创建的类进行预处理(继承元类) class MyMeta(type):     def __init__(self,name,bases,dicts):         print("Init method...")     def __new__(cls,name,bases,dicts):         dicts['info']=lambda self:print("Learning Python...")         res=type.__new__(cls,name,bases,dicts)         res.school="XiDian University"         return res; class Custom(metaclass=MyMeta):     pass if __name__ == '__main__':     cus=Custom()     cus.info()     print(cus.school) 3 构造序列 实现这四个方法中的某些方法:__len__(self)、__getitem__(self,key)、__setitem__(self,key,value)、__delitem__(self,key) class MySeq:     def __init__(self):         self.sleq=["I","II","III","IV"]     def __len__(self):         return len(self.sleq)     def __getitem__(self,key):         if 0<=key<self.__len__():             return self.sleq[key] if __name__ == '__main__':     mySeq=MySeq()     for i in range(mySeq.__len__()):         print(mySeq[i]) 4 构造iter 实现__iter__(self)、__next__(self) class MyIter:     def __init__(self,start,end):         self.count=start;         self.end=end;     def __iter__(self):         return self;     def __next__(self):         if self.count<self.end:             r=self.count             self.count+=1             return r         else:             raise StopIteration if __name__ == '__main__':     for i in MyIter(1,10):         print(i) 5 可比较的类 实现__lt__(),__le__(),__gt__(),__ge__(),__eq__(),__ne__()部分方法 class Point:     def __init__(self,x,y):         self.x=x         self.y=y     def __lt__(self,oth):   #小于的比较         return self.x<oth.x     def __gt__(self,oth):   #大于号的比较         return self.y>oth.y if __name__ == '__main__':     p1=Point(1,0)     p2=Point(0,1)     print(p1<p2)     print(p2>p1) 6构造可运算的类 实现__add__(),__sub__(),__mul__(),__div__()协议可以实现运算 class Cal:     def __init__(self,num):         self.num=num     def __add__(self,oth):         return self.num+oth.num     def __mul__(self,oth):         return self.num*oth.num if __name__ == '__main__' :     c1=Cal( 2 )     c2=Cal( 3 );     print (c1+c2)     print (c1*c2)
    转载请注明原文地址: https://ju.6miu.com/read-35366.html

    最新回复(0)