我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TypeError: object()

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TypeError: object()

日常编写Python代码的过程中,特别是Python新手,经常会遇到这样的错误:

TypeError: object() takes no parameters

对于上面这个错误,很容易迷惑我们,因为这个错误信息没有很明确的指出,到底是哪段代码除了问题。那这个错误是怎么产生的了,请听我细细道来。

在python中,方法是一个属性,也就是说,当我们调用一个方法时,python需要所属方法名对应的属性,比如说:

o.m()

python会现在对象o中搜索m属性,如果对象o有m属性(判断对象o有没有m属性,可以用hasattr函数)则调用它。

然而,python的方法是定义在一个class里的,而不是object里。也就是说如果m是o的方法,那就不可能是它的属性。正常情况下,python会先搜索对象的属性,如果没有,再去搜索类的属性,如果属性存在,则可以调用。(这地方可能大家会被类和对象两个概念搞混,不太准确的来说,类就是class,对象就是实例,具体大家可以查看文章笨办法学Python)

在python中,大多数的类都继承自object,在Python3中,如果你没有指定继承object,解释器会自动给你加上,而Python如果你没有指定,则为old-style class。大家在平时编写类时,建议大家都最好加上继承object,这样一个是代码兼容性号,一个是比较优雅。

如果属性在对象里不存在,我们会得到一个错误信息,指明了哪个地方的代码有问题和出问题的原因,但是和我们上面说的错误

TypeError: object() takes no parameters

这个错误是我在创建对象实例时报的错误,例如:


class Foo(object):
    pass

如果我这样:


f = Foo()

就不会有任何问题,但是如果我这样:

f = Foo(10)

然后我就会得到上面的错误,这究竟是为什么了?

这是因为Python在创建对象是,分为两个阶段:第一个阶段,对象是通过调用__new__方法来创建的,这个方法的细节我们基本上不用关心。__new__方法并不会立即返回一个对象实例,__new__方法之后,会调用__init__方法来给对象增加新的属性。对于上面的对象o,调用的就是

o.__init__()

Python首先查找o的__init__方法,但是没找到,然后查找父类的__init__方法,假设父类是上面的Foo,可以方式__init__方法依然不存在,所以最后会找到object的__init__属性。object的__init__是存在的,并且是个方法,然后调用这个方法,传入相应的参数,但是object.__init__方法没有参数,然后我们就得到的上面的错误。

TypeError: object() takes no parameters

整个流程下来,最让人迷惑的地方是,Python没有这样报错:

“object.__init__()” takes no parameters

于是我们没法定为这个问题出在哪。

总结下来,在实现一个python的类时,最后写上__init__方法,这样就可以避免这样的迷惑性的错误。

转载自我的博客捕蛇者说

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TypeError: object()

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

TypeError: object()

日常编写Python代码的过程中,特别是Python新手,经常会遇到这样的错误:TypeError: object() takes no parameters对于上面这个错误,很容易迷惑我们,因为这个错误信息没有很明确的指出,到底是哪段代码
2023-01-31

Python TypeError: ‘float‘ object is not subscriptable错误解决

发现问题写python的时候出现了这个错,所以想着给大家总结下,这篇文章主要给大家介绍了关于Python TypeError: ‘float‘ object is not subscriptable错误的解决办法,需要的朋友可以参考下
2022-12-23

Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法

Python 出现错误TypeError: ‘NoneType' object is not iterable解决办法 TypeError: 'NoneType' object is not iterable 这个错误提示一般发生在将No
2022-06-04

Python开发时报TypeError: ‘int‘ object is not iterable错误怎么解决

这篇文章主要讲解了“Python开发时报TypeError: ‘int‘ object is not iterable错误怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python开
2023-06-30

TypeError: _str_retu

今天听网课的时候遇到了这样一个问题:TypeError: __str__returned non-string (type NoneType)以及解决方法,分享给大家。(我学的是python3)错误提示翻译成中文的意思是:“类型错误:返回的
2023-01-31

python3 TypeError: a

运行telnetlib的时候报错:TypeError: a bytes-like object is required, not ‘str’,原因是因为python2和python3的版本的差异。在python2中可正常运行,而python
2023-01-31

解决python中TypeError:

出现这类问题,主要是字符串中包含了%号,python 认为它是转移符,而实际我们需要的就是%, 这个时候,可以使用%%来表示 原文链接:http://blog.csdn.net/benbendy1984/article/details/65
2023-01-31

python中typeerror的原因有哪些

Python中的TypeError错误通常发生在以下情况下:1. 数据类型不匹配:例如,使用字符串连接运算符(+)连接字符串和整数类型时会引发TypeError错误。```pythona = "Hello"b = 10c = a + b
2023-09-15

TypeError("PermWrapper is not iterable.")的处理方案

这个错误通常表明你在尝试将 Django 的 `PermWrapper` 对象作为可迭代对象使用,但它并不是可迭代的。如果 `user_permissions` 是一个 `PermWrapper` 对象,则上述代码将引发 `TypeErro
TypeError(
2024-02-28

Object moved

原文地址:
Object moved
2014-07-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录