高级农民
- 积分
- 2725
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-6-18
- 最后登录
- 1970-1-1
|
本帖最后由 magicsets 于 2020-2-26 17:20 编辑
第四题可以这么写:
- import builtins
- class Sum:
- def __init__(self, value):
- self.value = int(value)
- def __int__(self):
- return self.value
- def __call__(self, *args, **kwargs):
- # 这里显式使用 builtin.sum 因为下面我们要重定义 sum
- return Sum(self.value + builtins.sum([int(value) for value in args]))
- def __repr__(self):
- return str(self.value)
- def __add__(self, other):
- return Sum(self.value + Sum(other).value)
- sum = Sum(0)
- # 输出:15
- print(sum(1)(2)(3)(4)(5))
- # 输出:15
- print(sum(1, 2, 3)(4, 5))
- # 输出:15
- print(sum(1, sum(2)(3))(4, 5))
- s = sum(1)(2)(3)(4)
- # 输出:15
- print(s + 5)
- # 输出:20
- print(s + s)
- # 输出:20
- print(s(s))
- # 输出:30
- print(sum(s, s, s))
- # 输出:60
- print(sum(s(s), s(s(s)), s))
复制代码
但是python不支持自定义的隐式类型转换,所以扩展能力比较有限,上面只定义了加法,乘法(比如 s * s)就不行了
|
|