我正在研究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)
Run Code Online (Sandbox Code Playgroud)
然后这本书说"像一个函数一样调用类生成一个新类型的实例......等"并给出了这个例子.
bob = Worker('Bob Smith', 50000)
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
TypeError:此构造函数不带参数.
然后我开始嘀咕亵渎.那么我在这里做错了什么?
谢谢您的帮助.
大卫,你输错了 __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)
Run Code Online (Sandbox Code Playgroud)
一个拼写错误:它是__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)
Run Code Online (Sandbox Code Playgroud)
我也添加了(object)to class Worker-in Python 3.*它没关系,但在2.*它确实(甚至在3.*它没有伤害,无论如何;-).这使得课程"新风格"在初级阶段无关紧要,但只要你开始想要做任何"酷和有趣"的事情,比如添加属性;-).