2013-09-16 3 views
0

Почему я получаю ошибку в заголовке, когда я называю этот конструктор?TypeError: "__init __() получил несколько значений для ключевого слова argument 'name'"

Я называю User(**args) со следующим словарем в args:

{'name': u'Rose Perrone', 'ipAddress': '127.0.0.1', 'email': u'[email protected]'} 

Это конструктор:

def __init__(name, 
      ipAddress, 
      password=None, 
      email=None, 
      deleted=None, 
      includePromoted=None, 
      explicit=None): 
+4

Почему вы опуская 'я' из определения конструктора? –

+1

Пожалуйста, разместите трассировку стека. – user2357112

+0

Когда у меня был 'self' в качестве первого аргумента, я получил эту ошибку:' Python: __init __() принимает ровно 2 аргумента (3 данных) ' –

ответ

5

Во-первых, сделать свой первый параметр self. Вам это не обязательно, но это очень, очень часто, и когда кто-то читает ваш код (например, прямо сейчас), это раздражает: p.

name действует как self здесь. Вы не должны передавать значение для name (self), потому что python уже делает это. Однако вы это делаете, потому что в вашем словаре есть ключ name. Таким образом, вы передаете две вещи одному параметру, следовательно, ошибку.

Чтобы это исправить:

  1. Во-первых, self !!!!

  2. Но также не забудьте добавить в свой параметр name.

Так в целом:

args = {'name': u'Rose Perrone', 'ipAddress': '127.0.0.1', 'email': u'[email protected]'} 
class MyClass: 
    def __init__(self, 
       name, 
       ipAddress, 
       password=None, 
       email=None, 
       deleted=None, 
       includePromoted=None, 
       explicit=None): 
       pass 

MyClass(**args) 
# <__main__.MyClass instance at blah> 
+0

Когда я использую это, почему я получаю эту ошибку? 'TypeError ('__ init __() принимает ровно 3 аргумента (2 заданных)',)' –

+0

@RosePerrone Работает для меня. Вы точно скопировали мое решение? – TerryA

+0

Он работает, когда я использую этот словарь: '{'ipAddress': 'hey', 'name': 'test', 'email': 'hey'}', но не тогда, когда я использую этот словарь: '{'name' : u'Rose Perrone ',' twitterId ': u'2818972839', 'twitterOauthToken': u'3D15689754-abcdfghj5ITfAW8ny95adfM3fqHUcrhrOarcchhcjadeftbh ',' facebookId ': u'812222287391889', 'ipAddress': '127.0.0.1', 'email': ' u'[email protected] '} ' –

Смежные вопросы