Python __init__() 缺少 1 个必需的位置参数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19929626/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 14:59:56  来源:igfitidea点击:

__init__() missing 1 required positional argument

pythonpython-3.xconstructor

提问by eddard.stark

I am trying to learn Python. This is a really simple code. All I am trying to do here is to call a class's constructor. Initialize some variables there and print that variable. But it is giving me an error. It is saying:

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

missing 1 required positional argument

缺少 1 个必需的位置参数

Here is my code:

这是我的代码:

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()

采纳答案by Mike

You're receiving this error because you did not pass a datavariable to the DHT constructor.

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

aIKid and Alexander's answers are nice but it wont work because you still have to initialize self.datain the class constructor like this:

aIKid 和 Alexander 的答案很好,但它不起作用,因为您仍然必须self.data在类构造函数中进行初始化,如下所示:

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

And then calling the method showData like this:

然后像这样调用 showData 方法:

DHT().showData()

Or like this:

或者像这样:

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

or like this:

或者像这样:

# 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()

回答by viraptor

Your constructor is expecting one parameter (data). You're not passing it in the call. I guess you wanted to initialise a field in the object. That would look like this:

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

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()

Or even just:

或者甚至只是:

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

回答by aIKid

You need to pass some data into it. An empty dictionary, for example.

您需要向其中传递一些数据。例如,空字典。

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

However, in your example a parameter is not even needed. You can declare it by just:

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

def __init__(self):

Maybe you mean to set it from the data?

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

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()

showDatawill print the data you just entered.

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

回答by Alexander Zhukov

You should possibly make dataa keyword parameter with a default value of empty dictionary:

您可能应该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()

回答by Eyasu

The problem is with, you

问题是,你

def __init__(self, data):

when you create object from DHT class you should pass parameter the data should be dict type, like

当你从 DHT 类创建对象时,你应该传递参数,数据应该是 dict 类型,比如

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

But in your code youshould to change is

但是在你的代码中你应该改变的是

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

Or

或者

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