定义一个类继承于 int 类型,当传入参数为字符串,则输出所有字符ASCCI码的和
class Nint(int):def __init__(self, arg):
if isinstance(arg, str):
self.result = 0
for each in arg:
self.result += ord(each)
else:
self.result = int(arg)
def __repr__(self):
return str(self.result)
__str__ = __repr__
为啥print(Nint(3))、print(Nint('32'))都行,但print(Nint('i love fishc'))就报错? 这样就好了:class Nint(int):
def __new__(cls, arg, /):
return int.__new__(cls, sum(map(ord, arg)) if isinstance(arg, str) else arg)
你继承了 int 类,导致 __new__ 创建实例化过程不能将非整数字符串转化为 int 对象而报错,所以你应该重写 __new__ 而不是 __init__
重写了 __new__ 如果直接设置返回的是 result 值,那么就不必设置 __repr__ 方法了,因为此时返回的是 int的实力对象了,而不是 Nint 了
正确代码:
class Nint(int):
def __new__(self, arg):
if isinstance(arg, str):
result = 0
for each in arg:
result += ord(each)
else:
result = int(arg)
return result
print(Nint(3))
print(Nint('32'))
print(Nint('i love fishc'))
输出结果:
3
101
1132
Twilight6 发表于 2020-8-1 23:34
你继承了 int 类,导致 __new__ 创建实例化过程不能将非整数字符串转化为 int 对象而报错,所以你应该 ...
重写了 __new__ 如果直接设置返回的是 result 值,那么就不必设置 __repr__ 方法了,因为此时返回的是 int的实力对象了,而不是 Nint 了1.错字。
2.即使是 Nint 对象也不必设置,因为会继承。 Twilight6 发表于 2020-8-1 23:34
你继承了 int 类,导致 __new__ 创建实例化过程不能将非整数字符串转化为 int 对象而报错,所以你应该 ...
感谢 永恒的蓝色梦想 发表于 2020-8-1 23:18
这样就好了:
感谢!很强!
页:
[1]