我正在研究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:此构造函数不带参数。
然后我开始嘀咕亵渎。那么我在这里做错了什么?
感谢您的帮助。
答案 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生成一个不带参数的默认构造函数,因此出现错误消息。