2016-12-14 3 views
-3

Я новичок в python, и у меня возникла проблема с получением этого небольшого количества кода для работы. Я продолжаю сталкиваться с этой проблемой. Когда я запускаю это, я получаю сообщение об ошибке:Классы в Python - TypeError: object() не принимает параметров

TypeError: object() takes no parameters. 

Я включил сообщение об ошибке в полном объеме ниже.

Вот мой код:

class Bird: 
    _type = "" 

    def bird(self, type): 
     self._type = type 

    def display(self): 
     print(self._type) 


class Species: 
    _bird = None 
    _type = "" 

    def set_bird(self, bird): 
     self._bird = bird 

    def display(self): 
     print(self._type) 
     self._bird.display(self) 


class Cardinal(Species): 
    def cardinal(self): 
     self._type = "Cardinal" 


def main(): 
    species = Cardinal() 
    species.set_bird(Bird("Red")) 
    species.display() 


main() 

error message

+0

Вы запутались в том, как объявить конструктор. В python вы используете '__init__' не имя класса. Даже если бы я был таким образом, почему класс 'Bird' имел конструктор' bird'? –

+0

https://stackoverflow.com/questions/27078742/typeerror-object-takes-no-parameters – kta

ответ

1

В коде, вы делаете:

species.set_bird(Bird("Red")) 

При создании объекта Bird, вы передаете аргумент "Red". Но нет функции __init__() в классе Bird, чтобы принять этот аргумент. Ваш класс Bird должен быть следующим:

class Bird: 
    # _type = "" <--- Not needed 
    #     Probably you miss understood it with the 
    #     part needed in `__init__()` 

    def __init__(self, type): 
     self._type = type 

    def bird(self, type): 
     self._type = type 

    def display(self): 
     print(self._type) 
+0

Спасибо. Это исправило эту проблему. Но теперь я получаю новую ошибку: Traceback (последний последний звонок): Файл «/Users/MNK/Documents/hack.py», строка 35, в main() Файл «/ Пользователи/MNK/Документы/hack.py», строка 32, в главном species.display() файла "/Users/MNK/Documents/hack.py", строка 21, в дисплее self._bird.display (само) TypeError : display() принимает 1 позиционный аргумент, но 2 дано – Matthew

+0

Пожалуйста, создайте для этого отдельный вопрос. Также обратите внимание, что Python отмечает, что Python не является Java. Здесь вам не нужны функции setter и getter –

+0

@Matthew: Что касается новой ошибки, замените 'self._bird.display (self)' на 'self._bird.display()' –

0

Вы не __init__() функцию внутри Bird класса, так что вы не можете написать:

Bird("Red") 

Если вы хотите передать такой аргумент, вам нужно сделать:

class Bird: 
    def __init__(self, color): 
     self.color = color 

    # The rest of your code here 

Ниже вы можете увидеть результат:

>>> class Bird: 
...  def __init__(self, color): 
...   self.color = color 
... 
>>> 
>>> 
>>> b = Bird('Red') 
>>> b.color 
'Red' 

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

  • Нет связанных вопросов^_^