鱼C论坛

 找回密码
 立即注册
查看: 4544|回复: 4

关于魔法函数__add__(self,other)的问题

[复制链接]
发表于 2017-3-13 22:40:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由  那辰 于 2017-3-13 22:43 编辑

        如图所示,  def __add__(self,other)  为某一魔法函数标准格式,其中 self 指实例化对象本身,other 指另一个实例化对象本身.通过图中代码,可以将c1和c2两个实例化的手机价格相加 并返回 加数与被加数的和.
class CellPhone:  # 定义一个手机类的模板,包括品牌(brand)和价格(price)
        def __init__(self, brand, price=0.0):
                self.brand = brand
                elf.price = price
        def __add__(self, other):        # 魔法函数,self 指实例化对象本身,other 指另一个实例化对象本身.
                return self.price + other.price          # 将实例化对象的价格求和,得到两个品牌手机价格的和.                                               

c1 = CellPhone('iPhone 7', 7900.0)    # 实例化对象1
c2 = CellPhone('MI note 2', 2499.0)  # 实例化对象2
c3 = CellPhone('Nokia', 499.0)          # 实例化对象3
                                                       
print(c1+c2)   #求iPhone 7 和 小米note2 两个品牌手机的和,这里会调用魔法函数__add__(self,other)
                                                       
...10399.0  #返回结果(加数与被加数的和)

        问题是,我是否可以在__add__(self,other)形参位置通过加上 *args 使得该函数可以对多个实例化对象的(手机)价格进行相加?比如再加上c3 (即,c1+c2+c3).
]DGC~`0YS2XJVR_4)7%$T}M.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-13 22:44:17 | 显示全部楼层
@小甲鱼  大召唤术
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-13 22:45:11 | 显示全部楼层
楼主智商欠费 弄半天弄不好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 18:00:26 | 显示全部楼层
楼主搞好了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-9 18:33:36 | 显示全部楼层
本帖最后由 tzczjh 于 2020-3-9 18:37 编辑
class CellPhone:  # 定义一个手机类的模板,包括品牌(brand)和价格(price)
        def __init__(self, brand, price=0.0):
                self.brand = brand
                self.price = price

        def __str__(self):
                return str(self.price)
        
        def __add__(self, other):        # 魔法函数,self 指实例化对象本身,other 指另一个实例化对象本身.
                return CellPhone('', self.price + other.price)          # 将实例化对象的价格求和,得到两个品牌手机价格的和.                                               

c1 = CellPhone('iPhone 7', 7900.0)    # 实例化对象1
c2 = CellPhone('MI note 2', 2499.0)  # 实例化对象2
c3 = CellPhone('Nokia', 499.0)          # 实例化对象3
                                                       
print(c1+c2+c3)  
楼主应该是想实现这种方式吧
楼主代码里c1+c2返回类型是float所以c1+c2+c3会报错
要返回同类型的 这样python遇到c1+c2+c3会自动调用两次__add__
要直接print打印价格的话实现__str__就好了
魔法方法的参数是python定好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 14:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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