类型错误: __init__() 缺少 1 个必需的位置参数:'lists'



我创建了一个类,如下所示-

class child:
def __init__(self,lists):
self.myList = lists

def find_mean(self):
mean=np.mean(self.myList)
return mean

当我创建一个像下面这样的onject时——

obj=child()

它给出了错误-

TypeError: __init__() missing 1 required positional argument: 'lists'

如果我创建下面这样的对象,那么它工作得很好-

obj=child([44,22,55)

或者如果我创建下面这样的类-

class child:        
def find_mean(self,myList):
mean=np.mean(myList)
return mean

然后我创建了下面这样的对象-

obj=child()

然后它也很好,但是我需要按照我一开始解释的方式来做。你能帮我理解一下上下文吗?

在第一个示例中,__init__方法需要两个参数:

  • self由Python自动填充
  • lists是一个你必须给它的参数。它会尝试将这个值分配给一个名为self.myList的新变量,如果你不给它一个值,它就不知道应该使用什么值

在第二个示例中,您还没有编写__init__方法。这意味着Python创建自己的默认__init__函数,该函数不需要任何参数。但是,find_mean方法现在要求您改为给它一个参数。

当你说你想按照一开始解释的方式创建它时,这实际上是不可能的:类需要一个值,而你没有给它一个值。

因此,我很难说出你真正想做什么。然而,有一种选择可能是,你想早点创建这个类,然后再添加一个列表。在这种情况下,代码看起来是这样的:

import numpy as np
class Child:
def __init__(self, lists=None):
self.myList = lists

def find_mean(self):
if self.myList is None:
return np.nan
mean = np.mean(self.myList)
return mean

此代码允许您更早地创建对象,并在稍后向其添加列表。如果您尝试调用find_mean而不给它一个列表,它只会返回nan:

child = Child()
print(child.find_mean())  # Returns `nan`
child.myList = [1, 2, 3]
print(child.find_mean())  # Returns `2`

问题顶部的代码定义了一个名为child的类,该类有一个属性lists,该属性是在__init__方法中创建实例时分配的。这意味着在创建child的实例时必须提供一个列表。

class child:
def __init__(self, lists):
self.myList = lists

def find_mean(self):
mean=np.mean(self.myList)
return mean
# works because a list is provided
obj = child([44,22,55])
# does not work because no list is given
obj = child()  # TypeError

如果像第二个例子中那样创建类,则不再显式指定__init__,因此,对象没有必须在实例创建时分配的属性:

class child:        
def find_mean(self, myList):
mean=np.mean(myList)
return mean

# does not work because `child()` does not take any arguments
obj = child([44,22,55])  # TypeError
# works because no list is needed
obj = child()

要同时具有myList属性,不需要在创建时指定,唯一的方法是为其分配一个默认值:

class child:        
def find_mean(self,myList=None):
mean=np.mean(myList)
return mean

# now this will work
obj = child()
# as will this
obj = child([24, 35, 27])

最新更新