Python_TypeError:object() takes no parameters

学到第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 <module>
    ppn=Perceptron(eta=0.1,n_iter=10)
TypeError: object() takes no parameters

为什么会这样呢?


二、分析

”object() takes no parameters”这句话的意思是:object()不需要传进参数。

笔者瞬间就感到纳闷了,为什么不需要传入参数?我不是定义了初始化函数吗?这初始化函数里面有俩参数啊,为什么不能传递呢?(这位朋友,你戏真多)

最可能的解释是:

在实例化一个对象的时候,使用 类名+(参数)并没有成功调用到这个初始化参数,编译器默认调用类名+( ) ,这是一个无参的初始化函数,自然就不需要传进参数了。

如果尝试调用自己定义的初始化函数的方法没有错的话,那么之所以不能成功调用初始化函数,错误就在于初始化函数本身!

回去检查一下我写的这个初始化函数,猛地发现我把__init__写成了__int__,难怪啊!

改成正确的函数名以后,就可以成功调用,不会报错了~

希望有所帮助~




  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值