35

我正在努力学习 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()
4

6 回答 6

18

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

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)

然后像这样调用方法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()
于 2013-11-12T13:22:53.127 回答
4

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

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)
于 2013-11-12T12:50:54.840 回答
2

您可能应该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()
于 2013-11-12T12:57:20.280 回答
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将打印您刚刚输入的数据。

于 2013-11-12T12:52:46.010 回答
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()
于 2019-05-03T08:51:36.120 回答
0

如果错误类似于 Author=models.ForeignKey(User, related_names='blog_posts') TypeError: init () missing 1 required positional argument:'on_delete'

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

于 2020-07-09T04:49:32.467 回答