Python特殊取反方法重写疑问:为何需返回Card(-self.val)
关于Card类一元取反方法的解释
类型一致性是核心原因
Python里运算符重载方法(比如__neg__)要求返回结果和原对象为同类型(或兼容自定义类型)。要是直接返回-self.val,得到的是整数而非Card对象。比如后续想执行-d + Card(3)这类操作,整数和Card对象相加会直接报错,但返回Card实例就能正常完成运算。保持类的封装性
Card是自定义类,它的意义不只是存储val数值——哪怕现在只用到val,后续也可能扩展花色、牌面等级等属性。返回Card实例能保留类的封装特性,不会把对象拆成裸数值,保证逻辑的完整性。符合Python设计惯例
看Python内置类型的运算符操作:列表用+返回还是列表,字符串用*返回还是字符串,都是保持类型一致。__neg__作为运算符重载方法,也得遵循这个规矩,让代码行为符合开发者的普遍预期。
你说直接返回-self.val打印会得到-1,这确实是事实,但这么做相当于把Card对象的一元取反操作变成了“提取数值并取反”,完全丢掉了Card类的特性,后续只要涉及Card对象的操作都会出问题,这显然不是重载运算符的初衷。
内容的提问来源于stack exchange,提问作者tigerhoang03
相关产品推荐
相关产品推荐

