鱼C论坛

 找回密码
 立即注册
查看: 2115|回复: 0

[技术交流] 章节十一:算术运算

[复制链接]
发表于 2017-8-22 22:04:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 向西而笑 于 2017-8-24 16:53 编辑
课时42-43:算术运算
工厂函数:所谓的工厂函数就是类对象,调用工厂函数时就是生成了一个类实例对象。可以用type()函数来查看其本质,如:

  1. >>> type(str)
  2. <class 'type'>
  3. >>> type(list)
  4. <class 'type'>
  5. >>> type(dict)
  6. <class 'type'>
  7. >>> type(tuple)
  8. <class 'type'>
  9. >>> class A:
  10.    pass
  11. >>> type(A)
  12. <class 'type'>
复制代码



python提供了一些魔法方法自定义数值处理,通过对这些魔法方法的重写来自定义任何对象间的算术处理,当进行数值计算时就会自动地调用相应的魔法方法。
举一些例子说明:

算术运算符:__add__(self,other)和__sub__(self,other)分别是进行加和减计算处理的魔法方法。下面的例子通过重写这两个魔法方法把加和减的功能调换了:

  1. >>> class X(int):
  2.    def __add__(self,other):
  3.           return int.__sub__(self,other)
  4.    def __sub__(self,other):
  5.           return int.__add__(self,other)
  6. >>> a = X(100)
  7. >>> b = X(10)
  8. >>> a - b
  9. 110
  10. >>> a + b
  11. 90
复制代码
其他魔法方法使用方法也是如此。

反运算:本来应该是运算符左边的主动去‘处理’右边的,由于某些原因左边不支持运算就只能右边的主动了。比如a – b就是从a中减去b。但是如果a‘无能’,那就是从b中减去a。

  1. >>> class X(int):
  2.    def __rsub__(self,other):
  3.           print('好吧,我来当攻!')
  4.           return int.__rsub__(self,other)

  5.   
  6. >>> a = X(100)
  7. >>> a - 10
  8. 90
  9. >>> 10 - a
  10. 好吧,我来当攻!
  11. -90
复制代码



增量运算符和一元操作符
和a = a +1简化写成a += 1一样操作的魔法方法叫做增量运算。
复习一下‘一元’的意思:即只有一个操作数的叫做一元操作符。例如:

  1. >>> class X(int):
  2.    def __abs__(self):
  3.           print('抱死你...')
  4.           return int.__abs__(self)
  5. >>> a = X(-10)
  6. >>> abs(a)
  7. 抱死你...
  8. 10
复制代码




评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 06:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表