使用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