学到第8张,开始学习类,不理解的地方开始增多。
习题8.1报错:TypeError:object() takes no parameters(即不需要传递参数)
结论是:
如果你出现了这个报错,请检查你的__init__函数名或者其定义有没有写错。
注意:下划线左右是两个;中间的英文字母是四位,请一一对应。
我不但把init写成了int,还把下划线错写成左右各一(应该是左右各两个下划线)
源程序如下:
class Restaurant():
"""一次描述餐馆的简单尝试"""
def _int_(self,restaurant_name,cuisine_type):
"""初始化属性restaurant_name和cuisine_type"""
self.restaurant_name=restaurant_name
self.cuisine_type=cuisine_type
def describe_restaurant(self):
"""描述参观"""
print("The cuisine of "+self.restaurant_name+" is:"+self.restaurant_name)
def open_restanrant(self):
"""描述餐馆正在营业"""
print(self.restaurant_name+" is opening.")
restaurant=Restaurant('和平饭店','江湖救急')
restaurant.describe_restaurant()
restanrant.open_restanrant()
度娘后找到lifelegendc的CSDN帖子:关于错误:object() takes no parameters
因为贴主lifelegendc的分析思路比较有启发意义,为了纪念,原帖转贴如下:
先说结论:
如果你出现了这个报错,请检查你的__init__函数名或者其定义有没有写错。
注意:下划线左右是两个;中间的英文字母是四位,请一一对应。
--------------------------------------如果你有兴趣可以看看下面的分析过程------------------------------------
一、现象
先贴上自己出错的代码:
class Perceptron(object): def __int__(self, eta=0.01, n_iter=10): self.eta = eta self.n_iter = n_iter pass pass ppn=Perceptron(eta=0.1,n_iter=10)
报错如下:
Traceback (most recent call last):
File "D:/PyCharm/Neutron/Perceptron.py", line 13, in
ppn=Perceptron(eta=0.1,n_iter=10)
TypeError: object() takes no parameters
为什么会这样呢?
二、分析
”object() takes no parameters”这句话的意思是:object()不需要传进参数。
笔者瞬间就感到纳闷了,为什么不需要传入参数?我不是定义了初始化函数吗?这初始化函数里面有俩参数啊,为什么不能传递呢?(这位朋友,你戏真多)
最可能的解释是:
在实例化一个对象的时候,使用 类名+(参数)并没有成功调用到这个初始化参数,编译器默认调用类名+( ) ,这是一个无参的初始化函数,自然就不需要传进参数了。
如果尝试调用自己定义的初始化函数的方法没有错的话,那么之所以不能成功调用初始化函数,错误就在于初始化函数本身!
回去检查一下我写的这个初始化函数,猛地发现我把__init__写成了__int__,难怪啊!
改成正确的函数名以后,就可以成功调用,不会报错了~
希望有所帮助~