python 运算符重载

#运算符重载就是让用类写成的对象,可截获并响应用在内置类型上的运算:加法,切片,打印和点号运算等
#1. 以双下划线命名的方法(__X__)的特殊钩子,python运算符重载的实现是提供特殊命名的方法来拦截运算,python替每种运算和特殊命名的方法之间,定义了固定不变的映射关系
#2. 当实例出现在内置运算时,这类方法会自动调用,例如,如果实例对象继承了__add__方法,当对象出现+表达式内时,该方法就会调用,该方法的返回值会编程相应表达式的结果
#3. 类可覆盖多数内置类型运算
#4. 运算符覆盖方法没有默认值,而且也不需要,如果类没有定义或者继承运算符重载方法,就是说相应的运算在类实例中不支持,例如:如果没有__add__,+表达式就会引发异常

#5. 运算符可让类与python的对象模型相集成,重载类型运算时,以类实现的用户定义对象的行为就会像内置对象一样,因此,提供了一致性,以及与预期接口的兼容性

#运算符重载只意味着在类方法中拦截内置的操作——当类的实例出现在内置操作中,python自动调用你的方法,并且你的方法的返回值变成了相关操作的结果
#运算符重载让类拦截常规的python运算符
#类可重载所有python表达式运算符
#类可重载打印,函数调用,属性点号运算等内置运算
#重载使类实例的行为像内置类型
#重载是通过提供特殊名称的类方法来实现的
#所有重载方法的名称前后都有两个下划线字符
#多数重载方法只用在需要对象行为表现的像内置类型一样的高级程序中

class FirstClass:
    def setdata(self, value):
        self.data=value
    def display(self):
        print(self.data)
        
class SecondClass(FirstClass):
    def display(self):  #重写display方法
        print('current value="%s"'%self.data)
        
class ThirdClass(SecondClass):
    def __init__(self,value):
        self.data=value
    def __add__(self, other):    #重载加法
        return ThirdClass(self.data+other)
    def __str__(self):    #print打印一个对象时,运行__str__
        return '[ThirdClass:%s]'%self.data
    def mul(self,other):
        self.data*=other
       
a=ThirdClass('abc')
a.display()    #current value="abc"
print(a)    #[ThirdClass:abc] 调用__str__
a=a+'xyz'
a.display()     #current value="abcxyz"
print(a)      #[ThirdClass:abcxyz]
a.mul(3)
a.display()    #current value="abcxyzabcxyzabcxyz"
print(a)    #[ThirdClass:abcxyzabcxyzabcxyz]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值