web-dev-qa-db-ja.com

__init __()に1つの必須の位置引数がありません

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()
14
eddard.stark

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

コンストラクターには1つのパラメーター(データ)が必要です。あなたは呼び出しでそれを渡していない。オブジェクトのフィールドを初期化したかったのではないでしょうか。次のようになります。

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)
4
viraptor

データを渡す必要があります。たとえば、空の辞書。

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は、入力したデータを印刷します。

1
aIKid

おそらく、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()
1

問題はあなたです

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