python面向对象之重载

Python重载

哪些不能被重载?(内置类型的运算符)

不能新建运算符,智能通过重载完成

is and not or 不能被重载

1、 运算重载:(一元)

.neg(self)-------obj 取负

.pos(self)------ +obj 取正

.abs(self)------ abs(obj) 取绝对值

.invert(self)-----~obj 取反

算术运算重载(二元):

.add(self,other)-----obj+other 加法

.sub(self,other)-----obj-other 减法

.mul(self,other)-----obj*other 乘法

.truediv(self,other)-----obj/other 除法

.floordiv(self,other)-----obj//other 整除

.mod(self,other)-----obj%other 模运算

.divmod(self,other)-----divmod(obj,other) 除模

.pow(self,other)-----obj**other 求幂

.lshift(self,other)-----obj<<other 左移

.rshift(self,other)-----obj>>other 右移

.and(self,other)-----obj&other 位与

.xor(self,other)-----obj^other 位异或

.or(self,other)-----obj||other 位或

例子

add(self,other)和+是同种含义

  ls =  [1,2,3,4,5,6]
  lt =  [1,2,3,4]
  print(ls+lt)
  print(ls.__add__(lt))
  class  NewList(list):
      def __add__(self,other):
          new = []
          for i in range(len(self)):
              try:
                  new.append(self[i]+other[i])
              except :
                  new.append(self[i])
          return new
  lss =  NewList(ls)
  ltt =  NewList(lt)
  print(print(lss.__add__(ltt))==print(lss+ltt))
  print(ltt+lss)

结果:

2、其

他重载:

.lt(self,other)------- < low than

.le(self,other)------- <= low equal

.eq(self,other)------- == equal
.ne(self,other)------- != not equal

.gt(self,other)------- > great than

.ge(self,other)------- >= great equal

3、成员运算的重载

成员获取:[ ]、del、.reversed()

成员判断:in、 not in

.getitem(self,key)----- obj[k] 取值

.setitem(self,key,v)-----obj[k] = v 赋值

.delitem(self,key)-----del obj[k] 删除

.reversed(self)-----obj.reversed() 逆序

.contains(self,item)-----item in obj 成员判断

举例:

  class  NewList(list):
      def __contains__(self,item):
          s = 0
          for c in self:
              s+=c
          if super().__contains__(item) or item  == s:
              return True
          else:
              return False
   
  lss =  NewList([6,1,2,3])
  print(6 in  lss,12 in lss, 8 in lss,lss.__contains__(12))

4、其他重载

Python内置函数:

repr()、str()、len()、int()、float()、complex()、round()、

bytes()、bool()、format()

.repr(self)-------repr(obj) 可以打印字符串的运算逻辑

.str(self)------- str(obj) 字符串转换的运算逻辑

.len(self)------- len(obj) 对象操作的运算逻辑

.int(self)------- int(obj) 整数转换的运算逻辑

.float(self)------- float(obj) 浮点数的运算逻辑

.complex(self)------- complex(obj) 复数转换的运算逻辑

.round(self)-------round(obj) 对象四舍五入的运算逻辑

.bytes(self)------- bytes(obj) 对象字节串转换的运算逻辑

.bool(self)------- bool(obj) 布尔运算的运算逻辑

.format(self,format_spec)----obj.format() format(obj) 对象格式化输出的运算逻辑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 运算符重载是指在类中定义特殊方法,使得该类的实例对象可以像内置类型一样进行运算。Python中支持运算符重载,可以通过定义特殊方法来实现。例如,可以通过定义__add__方法来重载加号运算符,使得两个对象可以相加。 在Python中,运算符重载的方法名都以双下划线开头和结尾,例如__add__、__sub__等。这些方法可以重载加减乘除等运算符,也可以重载比较运算符、逻辑运算符等。 运算符重载可以使得代码更加简洁、易读,同时也可以提高代码的可维护性和可扩展性。但是需要注意的是,过度使用运算符重载可能会导致代码难以理解和维护,因此需要谨慎使用。 ### 回答2: Python是一门支持面向对象(OOP)编程的语言,它提供了很多方便的机制来帮助我们更好地定义和使用对象。其中之一就是运算符重载。 运算符重载是指在类中定义特殊方法来重载Python内置运算符的行为。比如,我们可以重载加号(+)运算符,使得两个对象相加时返回我们自己定义的结果。这样就可以让我们的对象像普通类型(如int和float)一样使用加号。 以下是使用方法: ```python class MyClass: def __init__(self, value): self.value = value def __add__(self, other): # 自己定义的加法 return MyClass(self.value + other.value) a = MyClass(1) b = MyClass(2) c = a + b # c的值是一个MyClass对象,其value属性为3 ``` 在上述代码中,`__add__`方法是用来重载`+`运算符的方法。当两个MyClass对象相加时,它们的`__add__`方法会被调用,然后返回自己定义的结果。 还有其他运算符也可以被重载,比如减号`-`,乘号`*`,等等。此外,Python还提供了一些通用的重载方法,比如`__eq__`用来实现相等比较,`__str__`用来定义对象的字符串表示等等。 需要注意的是,运算符重载虽然可以让我们的代码更加方便易读,但也容易被滥用。如果重载的运算符和普通的类型行为不一致,就容易引起混淆和错误。因此,在使用运算符重载时需要做好注释和测试,确保代码的正确性和可读性。 总之,Python面向对象编程支持运算符重载,这为我们提供了更加灵活和方便的对象定义和使用方式。但重载运算符也需要谨慎使用,化简代码的同时不要失去代码的可读性和正确性。 ### 回答3: 运算符重载Python 面向对象编程中的一个重要概念,它是指将已有的运算符赋予新的功能,使之具有更广泛的适用性。Python 提供了许多运算符,如加减乘除、比较、逻辑运算符等,这些运算符可以用于不同的数据类型,如整数、浮点数、字符串、列表等。运算符重载可以自定义这些运算符的行为,使之适用于用户自己定义的类。 在 Python 中,运算符的重载使用特殊的方法来实现。这些方法的名称都以 "__" 开头和结尾,例如 "__add__" 就是用来实现加法运算符重载的方法。这些方法通常会被定义在类中,用来定义类的运算符行为。在使用运算符时,Python 会自动调用对应的运算符重载方法,以便完成需要的运算。 以下是一些常用的运算符重载方法: __add__(self, other):重载加法运算符“+”,用来添加两个对象的值。 __sub__(self, other):重载减法运算符“-”,用来计算两个对象的差。 __mul__(self, other):重载乘法运算符“*”,用来计算两个对象的积。 __div__(self, other):重载除法运算符“/”,用来计算两个对象的商。 __eq__(self, other):重载相等运算符“==”,用来比较两个对象是否相等。 __ne__(self, other):重载不等运算符“!=”,用来比较两个对象是否不相等。 __lt__(self, other):重载小于运算符“<”,用来比较两个对象的大小。 __le__(self, other):重载小于等于运算符“<=”,用来比较两个对象的大小。 __gt__(self, other):重载大于运算符“>”,用来比较两个对象的大小。 __ge__(self, other):重载大于等于运算符“>=”,用来比较两个对象的大小。 使用运算符重载可以方便地扩展 Python 的运算符行为,使之适用于用户自定义的类。但是,使用运算符重载也需要注意一些问题,如运算符的优先级、运算符的结合性等。在使用运算符重载时,需要谨慎思考,以确保运算符行为符合预期。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值