初学者有课的问题

时间:2010-04-01 14:17:16

标签: python class

我正在研究O'Reilly的“学习Python”并且遇到课程问题。我想我理解这个概念,但在实践中偶然发现了这个问题。 Fron第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 个答案:

答案 0 :(得分:9)

大卫,你错误输入__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)

答案 1 :(得分:5)

一个拼写错误:它是__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)

我还在Python 3中添加了(object)class Worker。*它没关系,但在2. *它确实(甚至在3. *它没有'无论如何,伤害了;-)。这使得课程“新风格”,在初级阶段无关紧要,但只要你开始想做任何“酷和有趣”的事情,比如添加属性; - )。

答案 2 :(得分:2)

你写了__innit__而不是__init__

通过这种方式,您在类中声明了另一个方法,而不是称为构造函数的特殊方法,根据定义,该方法名为__init__。这导致Python生成一个不带参数的默认构造函数,因此出现错误消息。