初学者遇到类的问题
我正在学习O'Reilly的《学习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 个回答
2
你写成了 __innit__
,其实应该是 __init__
。
这样一来,你只是定义了一个普通的方法,而不是一个特殊的方法,也就是构造函数。构造函数的名字必须是 __init__
。所以,Python会自动生成一个不带参数的默认构造函数,这就导致了错误信息的出现。
5
有一个拼写错误:应该是 __init__
,而不是 __innit__
-- 就少了一个 n
。
你还有一些缩进的问题,不过我觉得这些可能是复制粘贴时出现的错误,要不然你在遇到 TypeError
之前就会看到 SyntaxError
了;-)。
所以你的代码应该是这样的:
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)
我还在 class Worker
后面加上了 (object)
-- 在 Python 3.* 中这没什么关系,但在 2.* 中是有区别的(即使在 3.* 中加上也没坏处;-)。这样做会让这个类变成“新风格”,虽然在最基础的层面上这没什么影响,但一旦你想做一些“酷炫有趣”的事情,比如添加属性时,就会变得很重要;-)。
8
大卫,你把 __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)