Почему этот метод Python не имеет «я»? - PullRequest
0 голосов
/ 17 июля 2011
class MM(dict):
    def __init__(self, indexed, *args, **kwargs):
        super(MM, self).__init__(*args, **kwargs) #must do it.
        self['name'] = 'hello, this is a value'
        self.go()

    def go(self, kwargs):
        print kwargs #I want this to print out the kwargs

Почему этот класс создает ошибку, когда я пытаюсь его инициализировать?

>> m = MM()

TypeError: metaMod_Distance() takes exactly 2 arguments (1 given)

Ответы [ 4 ]

2 голосов
/ 17 июля 2011

Измените ваш код следующим образом:

class MM(dict):
    def __init__(self, *args, **kwargs):
        super(MM, self).__init__(*args, **kwargs) #must do it.
        self['name'] = 'hello, this is a value'
        print kwargs
        # Or since you class is subclass of dict
        print self

Тогда

m = MM() #will work

Но если проиндексировано свойство, которое вам действительно нужно, не забудьте указать его значение при создании класса:

class MM(dict):
    def __init__(self, indexed, *args, **kwargs):
        super(MM, self).__init__(*args, **kwargs) #must do it.
        self['name'] = 'hello, this is a value'
        self.indexed = indexed
        print kwargs
        # Or since you class is subclass of dict
        print self

Тогда:

indexed = True #since i don't know it's datatype
m = MM(indexed)
2 голосов
/ 17 июля 2011

Ошибка проста.У тебя короткий аргумент.Вам нужно передать значение для indexed.

2 голосов
/ 17 июля 2011

Вы, вероятно, хотите сделать:

def go(self, **kwargs):
    print kwargs

Чтобы использовать только ключевые слова аргументы.Так что вызов функции будет работать.

Также вам нужно передать что-то еще вашему конструктору (из-за неиспользованного аргумента indexed):

m = MM(1) #or whatever
0 голосов
/ 17 июля 2011

Я не уверен, что именно вы пытаетесь сделать, но

  1. __init__ ММ имеет indexed в качестве аргумента, который вам нужно указать при создании объекта.
  2. Также метод go должен отправлять аргумент при вызове из init .Таким образом, в действительности это не доставит вам никаких проблем.

    class MM(dict):
    
        def __init__(self, indexed, *args, **kwargs):
            super(MM, self).__init__(*args, **kwargs) #must do it.
            self['name'] = 'hello, this is a value'
            self.go(kwargs)
    
        def go(self, kwargs):
            print kwargs #I want this to print out the kwargs
    
     m = MM('goone')
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...