Python学习29:使用特殊的方法定制类(类似于c++的运算符重载)

使用Pythonde 特殊方法可以实现:

   模拟标准的类型

   重载操作符

1、显示:__str__()

在没有定义__str__()前:

#FileName:customClass.py
#定制类中特殊方法

#输出:__str__

#定义一个类
class C(object):
    def __init__(self,s):
        self.s = s
        print('Calling Constructor')
        
#构建对象
co = C('Hello Python World')

print(co)


在定义__str__()后:

#FileName:customClass.py
#定制类中特殊方法

#输出:__str__

#定义一个类
class C(object):
    def __init__(self,s):
        self.s = s
        print('Calling Constructor')
        
    #实现__str__()
    def __str__(self):
        #返回实例属性
        return str(self.s)
     
#构建对象
co = C('Hello Python World')

print(co)


 

 

#FileName:customClass.py
#定制类中特殊方法

#数值的定制
class Time60:
    def __init__(self,hr,mi):
        self.hr = hr
        self.mi = mi
        print('调用Time60的构建函数')
    
    #显示
    def __str__(self):
        #返回字符串
        return str('%02d:%02d'%(self.hr,self.mi))
    
#     #加法
    def __add__(self,other):
        if self.hr + other.hr >= 24:
            tmphr = self.hr + other.hr - 24
        else:
            tmphr = self.hr + other.hr
        if self.mi + other.mi >= 60:
            tmphr += 1
            tmpmi = self.mi + other.mi - 60
        else:
            tmpmi = self.mi + other.mi
        return self.__class__(tmphr,tmpmi)
        #return Time60(tmphr,tmpmi)       #使用临时数值构建对象并返回,最好使用self.__class__()替代
      
    #原位加法
    def __iadd__(self,other):
        if self.hr + other.hr >= 24:
            self.hr = self.hr + other.hr - 24
        else:
            self.hr += other.hr
            
        if self.mi + other.mi >=60:
            self.mi = self.mi + other.mi - 60
            self.hr += 1
        else:
            self.mi += other.mi
        return self          #必须返回self
    
#构建对象
t = Time60(12,20)
t2 = Time60(16,20)
print('输出t的时间设置: %s'%t)      #12:20
print('相加后的时间为: %s'%(t + t2))  #05:00

t += t2
print('当前的实例t输出: %s'%t)


注意: 

     1、self.__class__()相当于Time60()

     2、重载一个__i*__()方法必须返回self

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值