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

类的特殊方法
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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值