У новичка возникли проблемы с занятиями - PullRequest
0 голосов
/ 01 апреля 2010

Я работаю через "Learning Python" О'Рейли и у меня проблемы с классами. Я думаю, что понимаю концепцию, но на практике наткнулся на эту проблему. Первая страница 88-89:

>>> class Worker:
def __innit__(self, name, pay):
    self.name=name
    self.pay=pay
    def lastName(self):
        return self.name.split()[-1]
    def giveRaise(self, percent):
        self.pay*=(1.0+percent)

Затем в книге говорится: «Вызов класса как функции создает экземпляры нового типа ... и т. Д.» И приводит этот пример.

bob = Worker('Bob Smith', 50000)

Это дает мне эту ошибку:

TypeError: этот конструктор не принимает аргументов.

И тогда я начинаю бормотать ненормативную лексику. Так что я тут не так делаю?

Спасибо за помощь.

Ответы [ 3 ]

9 голосов
/ 01 апреля 2010

Дэвид, вы неправильно набрали __init__

Правильное написание это:

def __init__(self, name, pay):
    self.name=name
    self.pay=pay
def lastName(self):
    return self.name.split()[-1]
def giveRaise(self, percent):
    self.pay*=(1.0+percent)
5 голосов
/ 01 апреля 2010

Одна ошибка: это __init__, а не __innit__ - только одна n.

У вас также есть некоторые проблемы с отступами, но я думаю, что они могут быть связаны только с проблемами копирования и вставки, иначе вы получите SyntaxError с до TypeError, с которым вы связаны; -).

Так что ваш код, вероятно, должен быть:

class Worker(object):
    def __init__(self, name, pay):
        self.name=name
        self.pay=pay
    def lastName(self):
        return self.name.split()[-1]
    def giveRaise(self, percent):
        self.pay*=(1.0+percent)

Я также добавил (object) к class Worker - в Python 3. * это не имеет значения, но в 2. * это имеет значение (и даже в 3. * в любом случае это не больно) ;-). Это делает класс «новым стилем», который не имеет значения на очень элементарных уровнях, но сразу же, как только вы захотите сделать что-нибудь «крутое и интересное», такое как добавление свойств; -).

2 голосов
/ 01 апреля 2010

Вы написали __innit__ вместо __init__.

Таким образом, вы объявили просто другой метод в классе, а не специальный метод, называемый конструктором, который по определению называется __init__. Это приводит к тому, что Python генерирует конструктор по умолчанию без аргументов, поэтому появляется сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...