鱼C论坛

 找回密码
 立即注册
查看: 1431|回复: 8

[已解决]42讲课后动手题 小疑问

[复制链接]
发表于 2020-11-19 11:13:35 | 显示全部楼层 |阅读模式
1鱼币
  1. class Nstr:
  2.     def __init__(self, arg='  '):
  3.         if isinstance(arg, str):
  4.             self.total = 0
  5.             for each in arg:
  6.                 self.total += ord(each)
  7.         else:
  8.             print("参数错误!")

  9.     def __add__(self, other):
  10.         return self.total + other.total

  11.     def __sub__(self, other):
  12.         return self.total - other.total

  13.     def __mul__(self, other):
  14.         return self.total * other.total

  15.     def __truediv__(self, other):
  16.         return self.total / other.total

  17.     def __floordiv__(self, other):
  18.         return self.total // other.total
复制代码


other.total的total是什么意思
最佳答案
2020-11-19 11:13:36
本帖最后由 jackz007 于 2020-11-19 14:38 编辑
wuyanzulqq 发表于 2020-11-19 14:33
就是万一有第三个代表class类的实例呢


      没有问题呀, a + b + c + d 都行呀,但是,要知道,这些数学运算的两边永远只有两个对象。

最佳答案

查看完整内容

没有问题呀, a + b + c + d 都行呀,但是,要知道,这些数学运算的两边永远只有两个对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-19 11:13:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-11-19 14:38 编辑
wuyanzulqq 发表于 2020-11-19 14:33
就是万一有第三个代表class类的实例呢


      没有问题呀, a + b + c + d 都行呀,但是,要知道,这些数学运算的两边永远只有两个对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-19 12:20:24 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2020-11-19 12:49 编辑

        total 是 Nstr 类的一个属性,记录的是对象字符串中每一个字符编码值的总和。
        Nstr 类中定义的方法都是魔法方法,规定了两个对象在进行加、减、乘、除以及地板除运算时所采用的计算方法。这些方法的输入参数都是两个对象,其中,self . total  是其中一个对象的 total 属性,other .  total 则是另一个对象的 total 属性值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-19 13:35:17 | 显示全部楼层
jackz007 发表于 2020-11-19 12:20
total 是 Nstr 类的一个属性,记录的是对象字符串中每一个字符编码值的总和。
        Nstr 类中 ...

那也就是说上面定义的这个属性self.total跟下面返回的self.total只是同名吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-19 13:50:54 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-19 14:17 编辑
wuyanzulqq 发表于 2020-11-19 13:35
那也就是说上面定义的这个属性self.total跟下面返回的self.total只是同名吧?


        看来你完全没有理解类和对象的概念,self 和 other 分别代表两个对象,self . total 是一个对象的属性,other . total 是另一个对象的属性。

        如果 "人" 是一个类的话,每个 "人" 都有一颗心脏,就是说,心脏是 "人" 这个类的一个共有(或必有)属性,你、我都是人类的一员(实例),其实就是 "人" 这个类的一个对象,所以,你、我也都有一颗心脏,可是,你的心脏肯定不是我的心脏,那么,如果 self . total 是我的心脏的话,那么, other . total 就是你的心脏了。

        试试下面的代码可以加深理解
  1. #coding:gbk
  2. class Nstr:
  3.     def __init__(self, arg='  '):
  4.         if isinstance(arg, str):
  5.             self.total = 0
  6.             for each in arg:
  7.                 self.total += ord(each)
  8.         else:
  9.             print("参数错误!")

  10.     def __add__(self, other):
  11.         return self.total + other.total

  12.     def __sub__(self, other):
  13.         return self.total - other.total

  14.     def __mul__(self, other):
  15.         return self.total * other.total

  16.     def __truediv__(self, other):
  17.         return self.total / other.total

  18.     def __floordiv__(self, other):
  19.         return self.total // other.total

  20. a = Nstr('abc')                  # 用到 __init__(self, arg='  ')
  21. b = Nstr('ABC')                  # 用到 __init__(self, arg='  ')
  22. print('a + b =' , a + b)         # a . total +  b . total , 用到 __add__(self, other)
  23. print('a - b =' , a - b)         # a . total -  b . total , 用到 __sub__(self, other)
  24. print('a * b =' , a * b)         # a . total *  b . total , 用到 __mul__(self, other)
  25. print('a / b =' , a / b)         # a . total /  b . total , 用到 __truediv__(self, other)
  26. print('a // b =' , a // b)       # a . total // b . total , 用到 __floordiv__(self, other)
复制代码

        代码中的对象 a 对应魔法方法中的 self,对象 b 对应 other 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-19 14:20:33 From FishC Mobile | 显示全部楼层
jackz007 发表于 2020-11-19 13:50
看来你完全没有理解类和对象的概念,self 和 other 分别代表两个对象,self . total 是一个对 ...

那如果有两个以上的对象呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-19 14:33:58 From FishC Mobile | 显示全部楼层
jackz007 发表于 2020-11-19 13:50
看来你完全没有理解类和对象的概念,self 和 other 分别代表两个对象,self . total 是一个对 ...

就是万一有第三个代表class类的实例呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-19 14:35:14 From FishC Mobile | 显示全部楼层
jackz007 发表于 2020-11-19 13:50
看来你完全没有理解类和对象的概念,self 和 other 分别代表两个对象,self . total 是一个对 ...

如何表达呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-19 14:39:16 From FishC Mobile | 显示全部楼层
OKOK,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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