Python实现找缺失数功能类实例化报__init__缺arr、n参数如何解决
报错原因
- 你的
Missing类的构造方法__init__显式要求传入arr、n两个位置参数,但你实例化类时写的Obj = Missing()没有传入任何参数,直接触发了参数缺失类型错误。 - 额外的逻辑问题:你将输入读取语句直接写在类的全局属性位置,读取到的
arr、n属于类公共属性,不会自动传递给实例的构造方法,属于类属性和实例属性的用法混淆。
可行修复方案
你可以选择以下任意一种方案修复,第二种写法更符合Python类的使用规范:
方案1:实例化时传入类属性值
仅修改实例化代码,其他逻辑保持不变:
class Missing: n = int(input()) arr = list(map(int,input().split(" "))) def __init__(self,arr,n): self.arr = arr self.n = n def MissingNumber(self): self.res = self.n*(self.n+1)/2 self.sum_array = sum(self.arr) return "Missing no. is ",self.res-self.sum_array # 传入类属性中存储的输入值 Obj = Missing(Missing.arr, Missing.n) print(Obj.MissingNumber())
方案2:输入逻辑移到类外部(推荐)
调整输入逻辑的位置,避免类属性滥用,同时优化除法为整数除法避免浮点数输出:
class Missing: def __init__(self, arr, n): self.arr = arr self.n = n def MissingNumber(self): total = self.n * (self.n + 1) // 2 arr_sum = sum(self.arr) return "Missing no. is", total - arr_sum # 类外读取输入参数 n = int(input()) arr = list(map(int, input().split(" "))) # 传入参数实例化类 obj = Missing(arr, n) print(obj.MissingNumber())
内容的提问来源于stack exchange,提问作者Ajay Kathwate
相关产品推荐
相关产品推荐

