发布于2026-07-20 阅读(0)
扫一扫,手机访问
这个例子并没有完整实现数字类型的所有计算运算符,不过思路很清晰——一旦补齐全部数学运算符,这个自定义类就能像鸭子类型一样,在Python中当作普通数字参与计算。当然,如果只是临时用一下,直接调用类里的 self.value 参数也能凑合着算。
关键点在于 self.add 这个属性,它用来记录当前数字被求正(+)或求负(-)运算符操作的状态。当同一个运算符被连续使用两次时,会产生自增或自减的效果。具体来说:
来看实现代码:
class MyInt:
def __init__(self, value, add=0):
self.add = add
self.value = value
def __pos__(self):
add = self.add == 1
return MyInt(self.value + add, 1 - add)
def __neg__(self):
add = self.add == -1
return MyInt(-self.value - add, add - 1)
def __repr__(self):
return str(self.value)
def __eq__(self, other):
return self.value == other
附带一套测试代码,看看实际效果:
i = MyInt(1)
print('\n测试原本数据:')
print(f'{i = }') # 1
print('\n测试求正、自增、自增后求正、连续自增:')
print(f'{+i = }') # 1
print(f'{++i = }') # 2
print(f'{+++i = }') # 2
print(f'{++++i = }')# 3
print('\n测试求负、自减、自减后求负、连续自减:')
print(f'{-i = }') # -1
print(f'{--i = }') # 0
print(f'{---i = }') # 0
print(f'{----i = }') # -1
print(f'{-----i = }') # 1
print(f'{------i = }')# -2
print('\n测试混合使用求正、求负、自增、自减:')
print(f'{+-i = }') # -1
print(f'{-+i = }') # -1
print(f'{+-+-i = }') # 1
print(f'{-+-+i = }') # 1
print(f'{++--i = }') # 1
print(f'{--++i = }') # 1
print(f'{+--+i = }') # 0
print(f'{-++-i = }') # 0
这里需要特别说明一点:++i 并没有实现真正的“自增”效果——原始变量 i 的值并没有被原地修改。因为 Python 中的 ++i 完全等价于 (+(+i)),而 C 语言里这两个写法是不同运算符的结果。本质原因在于:C 语言中 ++ 是两个运算符(前置自增、后置自增),而 Python 中 + 只是一个一元运算符,连续写两个 + 只是重复调用同一个方法。所以这个差异是语言层面无法弥合的。
至于 i++ 和 i-- 这类后置运算符,在 Python 中就更没有对应的实现方式了。
上一篇:python简介与入门
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8