__init __()缺少1个必需的位置参数

时间:2013-11-12 12:48:00

标签: python python-3.x constructor

我正在努力学习Python。这是一个非常简单的代码。我在这里尝试做的就是调用类的构造函数。在那里初始化一些变量并打印该变量。但它给了我一个错误。它说:

  

缺少1个必要的位置参数

这是我的代码:

class DHT:
    def __init__(self, data):
        self.data['one'] = '1'
        self.data['two'] = '2'
        self.data['three'] = '3'
    def showData(self):
        print(self.data)

if __name__ == '__main__': DHT().showData()

6 个答案:

答案 0 :(得分:4)

您收到此错误是因为您没有将data变量传递给DHT构造函数。

aIKid和亚历山大的答案很好,但它不会起作用,因为你仍然必须在类构造函数中初始化self.data,如下所示:

class DHT:
   def __init__(self, data={}):
      self.data = data
      self.data['one'] = '1'
      self.data['two'] = '2'
      self.data['three'] = '3'
   def showData(self):
      print(self.data)

然后像这样调用方法showData:

DHT().showData()

或者像这样:

DHT({'six':6,'seven':'7'}).showData()

或者像这样:

# Build the class first
dht = DHT({'six':6,'seven':'7'})
# The call whatever method you want (In our case only 1 method available)
dht.showData()

答案 1 :(得分:3)

您的构造函数需要一个参数(数据)。你没有在通话中传递它。我想你想初始化对象中的一个字段。这看起来像这样:

class DHT:
    def __init__(self):
        self.data = {}
        self.data['one'] = '1'
        self.data['two'] = '2'
        self.data['three'] = '3'
    def showData(self):
        print(self.data)

if __name__ == '__main__':
    DHT().showData()

甚至只是:

class DHT:
    def __init__(self):
        self.data = {'one': '1', 'two': '2', 'three': '3'}
    def showData(self):
        print(self.data)

答案 2 :(得分:1)

您需要将一些数据传递给它。例如,一本空字典。

if __name__ == '__main__': DHT('a').showData()

但是,在您的示例中,甚至不需要参数。您可以通过以下方式声明它:

def __init__(self):

也许你的意思是从数据中设置它?

class DHT:
    def __init__(self, data):
        self.data['one'] = data['one']
        self.data['two'] = data['two']
        self.data['three'] = data['three']
    def showData(self):
        print(self.data)

if __name__ == '__main__': DHT({'one':2, 'two':4, 'three':5}).showData()

showData将打印您刚刚输入的数据。

答案 3 :(得分:1)

您应该使data关键字参数的默认值为空字典:

class DHT:
    def __init__(self, data=dict()):
        self.data['one'] = '1'
        self.data['two'] = '2'
        self.data['three'] = '3'
    def showData(self):
        print(self.data)

if __name__ == '__main__': 
    DHT().showData()

答案 4 :(得分:0)

问题出在你身上

def __init__(self, data):

从DHT类创建对象时,应传递参数 数据应为dict类型,例如

data={'one':1,'two':2,'three':3}
dhtObj=DHT(data)

但是在您的代码中,您应该更改的是

data={'one':1,'two':2,'three':3}
if __name__ == '__main__': DHT(data).showData()

if __name__ == '__main__': DHT({'one':1,'two':2,'three':3}).showData()

答案 5 :(得分:0)

如果错误类似 Author = models.ForeignKey(User,related_names ='blog_posts') TypeError:初始化()缺少1个必需的位置参数:'on_delete'

然后解决方案将是这样,您必须添加一个参数 Author = models.ForeignKey(User,related_names ='blog_posts',on_delete = models.DO_NOTHING)