hasattr(object, name):用来检测object(适用于类、文件、模块或对象,一切皆对象)中有没有一个name字符串对应的方法或属性。...,而getattr又没有提供默认值,则报错 Traceback (most recent call last): File "", line 1, in AttributeError...,对象也只能使用那些属性,对象不能自己去创建新属性(因为没有了__dict__),也不能修改类的属性,因为受类控制。 ..., name)方法,当发现属性x不存在于对象的__dict__中时,就调用了__getattr__,即属性拦截。 ...,因为我们可以完全的去自定义子类,子类中可以增加父类没有的功能,对于继承了已有对象类型的子类,我们在操作__getitem__、__setitem__、delitem__属性时,必然会跟__dict__
: 'Point' object has no attribute 'z' 可以看出不能给 pt 中没有定义的属性赋值,下面去掉 __slots__ 所在行: class Point2: def..._getattrobute__() 只要涉及到实例属性的访问就会调用该方法,如果属性不存在会抛出AttributeError 异常。...__getattr__() 在以下情况下调用: 属性不在实例的dict中; 属性不在其基类以及祖先类的dict 中; 触发AttributeError 异常时(不仅仅是get_attribute() 引发的异常...3.当__getattr__ 和__getattribute__ 同时被定义时,要么显示在__getattribute__ 中调用,要么抛出AttributeError异常,否则__getattr__...__dict__: raise ValueError("cannot delete a const attribute") raise AttributeError
dir and vars: 一切都是字典 你有没有想过Python如何存储对象,它们的变量及方法?我们知道所有对象都有自己的属性和方法,但是Python究竟如何跟踪它们呢?...__dict__ AttributeError: 'SlottedClass' object has no attribute '__dict__' >>> s....property @property是当您要为对象中的属性定义获取器(getter)和设置器(setter)时要使用的修饰符。...getters 和 setter 提供了一种在尝试读取或修改对象的属性时添加验证或运行一些额外代码的方法。...这是通过将属性转换为一组函数来完成的:一个函数在您尝试访问属性时运行,另一个函数在您尝试更改其值时运行。
解决AttributeError: 'collections.defaultdict' object has no attribute 'iteritems'在进行Python编程时,有时候我们会遇到类似于...而collections.defaultdict是Python字典的一个子类,继承了Python字典的所有方法和属性,因此也没有iteritems方法。...然后,通过读取文件的每一行,使用split()方法将行拆分为单词列表。我们使用count_dict[word] += 1将每个单词的计数加1。...作为dict的子类,collections.defaultdict继承了dict的所有方法和属性,可以像普通字典一样进行操作。...创建一个defaultdict对象时,需要传递一个默认值类型作为参数。常见的默认值类型有:int,list,set,dict等。
Pickler 对象默认并没有 dispatch_table 属性,该对象默认使用 copyreg 模块中定义的全局 dispatch 表。...尝试打包不能被打包的对象会抛出 PicklingError 异常,异常发生时,可能有部分字节已经被写入指定文件中。...没有定义此方法的话,先前打包的 state 对象必须是 dict,且该 dict 内容会在解包时赋给新实例的 dict。...可选元素,用于表示对象的状态,将被传给前述的 setstate() 方法。 如果对象没有此方法,则这个元素必须是字典类型,并会被添加至 dict 属性中。 ...其中 TextReader 类打开了一个文本文件,每次调用其 readline() 方法则返回行号和该行的字符。 在封存这个 TextReader 的实例时,除了 文件对象,其他属性都会被保存。
,即当我们读取或者操作某文件时,我们定义的路径下并没有此文件。...dict1 = {'a':1,'b':2} print(dict1['c']) --------------------------------------------- >>> print(dict1...属性错误,调用对象不存在的一个方法属性时将报这个错误。...(str1.append('f')) >>>AttributeError: 'str' object has no attribute 'append' UnicodeDecodeError 解码错误,...这种错误经常在读取文件时报错。
__dict__ 的 keys 必须是 strings, proxy 的机制防止了对于 class.__dict__ 的写入操作, 因此只有 setattr() 可以被用于添加属性, class....如果我们不使用一些 proxy 的机制,那么 __dict__,class.__dict__ 就可以被写入了。如果可以写入,也就可以被删除,而 class....__dict__['__dict__'] 是一个 GetsetDescriptor,所以实例的属性是有能力增加的) 对于 class A 的实例 a ,访问 a.__dict__ 时的背后是通过 A....对于一般的实例对象,__dict__ 会返回一个保存包含所有实例属性的独立的 dict 实例对象,对 __getattribute__ 的调用首先会访问这个 dict,并获取相应的实例属性 (这个调用会在通过描述器协议访问...前两个描述器可能会因为定义了 __slots__ 而消失,没有 __dict__ and __weakref__ 属性,反而会有每一个定义在 __slots__ 的属性。
prop = 42 ... >>> C.prop 42 你甚至可以设置和删除对象的属性: >>> C.prop = 84 >>> C.prop 84 >>> del C.prop 将字典的键值对和对象及其属性比较...进行读写时,就要使用装饰器 @property 。...通过 property 装饰器,将属性转换为一组方法来实现的:一个方法在访问属性时运行,另一个方法尝试更改属性值时运行。...坦率地说,描述符是一个非常高级的话题,如果在这里试图涵盖它,没有任何用处,因为它只是和已告知的内容有所关联。...dict:以键值对为成员。
习惯;记住要多使用Ctrl+S来保存文件,养成良好习惯 文件打开模式 ‘r’ 以只读方式打开文件 'w' 已写入的方式打开文件,会覆盖原有文件 'x' 如果文件已经存在,会抛出异常 'a' 以写入模式打开...readline() 从文件中读取一整行字符串 write(str) 将字符串str写入文件 writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串可迭代的对象。...特性应用或赋值时引发(试图访问一个对象没有的属性) IOError 试图打开不存在的文件或者无全新的文件等操作时,就会引发(输入输入异常,基本是无法打开文件...如果没有赋值覆盖,那么引用的是类对象的count属性。 有点绕对吧 看一下图就很好理解了 ?...__dict__ {'y': 4, 'x': 2} 兑现实例对象dd有了两个新属性,而是这两个属性是仅属于实例对象的 >>> CC.
获取对象属性值 print(getattr(test,'x')) #1024 print(getattr(test,'e','实例化对象中没有 e 属性')) #有实例化对象中没有 e 属性 #18....setattr 设置对象属性值 setattr(test,e,'Hello world') print(getattr(test,'e','实例化对象中没有 e 属性')) #hello world...= a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy.deepcopy(a) #对象拷贝,深拷贝 a.append(5) #修改对象a a[4].append...#文件打开模式 'r' 以只读方式打开文件(默认) 'w' 以写入的方式打开文件,会覆盖已存在的文件 'x' 如果文件已经存在,使用此模式打开将引发异常 'a' 以写入模式打开,如果文件存在,则在末尾追加写入...尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointError 浮点计算错误 GeneratorExit generator.close()
AttributeError 当你访问一个对象的属性,但是这个属性并没有在这个对象定义的时候,就会引发 AttributeError。...' object has no attribute 'b' AttributeError 的错误消息行告诉我们特定对象类型(在本例中为 int)没有访问的属性, 在这个例子中属性为 b。...: 'tuple' object has no attribute 'append' 这里尝试给 a_list 对象进行 append 操作但是引发了异常, 这里的错误信息说,tuple 对象没有...append 属性。...这是因为 SyntaxError 是在 Python 尝试解析代码时引发的,实际上代码并没有执行。
尝试访问未知的对象属性 >>> my_list = [] >>> my_list.fisa Traceback (most recent call last): File "", line...= {"one":"1","two":"2","three":"3"} >>> dict1['one'] '1' >>> dict1['six'] Traceback (most recent call...last): File "", line 1, in KeyError: 'six' >>> nameerror尝试访问一个不存在的变量 >>> name = {}...print('没有异常') ......特性应用或赋值时引发(试图访问一个对象没有的属性) IOError 试图打开不存在的文件或者无全新的文件等操作时,就会引发(输入输入异常,基本是无法打开文件
实现__getattr__的用户定义类可以实现我称之为虚拟属性的动态属性变体:这些属性在类的源代码中没有明确声明,也不在实例__dict__中存在,但可能在用户尝试读取不存在的属性时在其他地方检索或在需要时动态计算...⑧ 尝试读取一个不存在的属性会引发KeyError,而不是通常的AttributeError。...② vars返回obj的__dict__,显示它没有实例属性。 ③ 从obj.data中读取Class.data的值。 ④ 写入 obj.data 创建一个实例属性。 ⑤ 检查实例以查看实例属性。...在这种情况下,只有描述符处理写入。通过实例读取描述符将返回描述符对象本身,因为没有__get__来处理该访问。...尝试更改complex数的c.real属性会得到AttributeError: readonly attribute,但尝试更改complex的方法c.conjugate会得到AttributeError
dict转换为list 1In [3]: info.values() 2Out[3]: dict_values(['1581338', '广东', '广州', '510000', '020', '移动'...]) 我们还想将查询结果存储到文件,我自然想到了pandas,将list转换为DataFrame,然后写入csv就可以了 1In [4] : import phone 2 ...: import...这是因为1300000号段不存在,怎么办呢,程序容错性太差了,不够健壮,我们尝试加入容错机制 1In [6] : import phone 2 ...: import pandas as pd...csv,文件中含有中文,注意将文件编码设置为gbk 1In [29]: # 文件包含中文,将文件编码设置为gbk 2 ...: df.to_csv('phone_list.csv', encoding...='gbk') 打开生成的文件,如下图所示,这就是我梦寐以求的那张表 ?
此外,如果把对象看成dict,__getitem__()的参数也可能是一个可以作key的object,例如str。...__getattr__ 正常情况下,当调用类的方法或属性时,如果不存在,就会报错。...AttributeError: 'Student' object has no attribute 'score' 错误信息很清楚地告诉我们,没有找到score这个attribute。...,比如score,Python解释器会试图调用__getattr__(self, 'score')来尝试获得属性,这样,我们就有机会返回score的值: >>> s = Student() >>> s.name...的dict中,同时从类属性中删除该Field属性,否则,容易造成运行时错误(实例的属性会遮盖类的同名属性); 把表名保存到__table__中,这里简化为表名默认为类名。
: ‘tuple’ object has no attribute ‘remove’ 属性错误:元组对象没有属性’remove’。...: 'tuple' object has no attribute 'remove' 8.KeyError: ‘ff’ key 键错误:没有指定的键值“ff” 错误例子: >>> dict={'a':1...错误例子: >>> dict={'a':1,'b':2,'c':3} >>> dict.pop() Traceback (most recent call last): File "<pyshell...解决办法:使用+拼接时必须使用字符串,或将数字转化成字符串str() 错误例子: >>> 'hello'+9 Traceback (most recent call last): File "<pyshell...FileNotFoundError: [Errno 2] No such file or directory: ‘file1’ 文件不存在:尝试打开一个不存在的磁盘文件或目录。
经常用到的双下方法 __init__: 在调用类时触发。 __delarttr__: __getattr__: 会在对象.属性时,“属性没有”的情况下才会触发。对象....__dict__[属性]不会触发__getattr__,会报keyerror; __getattribute__:会在对象.属性时触发,不管有没有该属性都会触发; __setattr__: 会在 “对象...# def __getattr__(self, item): # print('只有对象获取一个没有的属性值得时候触发我!')...def __getattribute__(self, item): print('类或对象无论获取的属性有没有都会触发我!...__dict__) # {'y': 100} # Uderline_func.z # 只会触发__getattribute__ u.z # 获取没有的属性触发__getattr__ # u.name =
模式通常是下面这样的: "r" 以只读模式打开,你只能读取文件但不能编辑/删除文件的任何内容 "w" 以写入模式打开,如果文件存在将会删除里面的所有内容,然后打开这个文件进行写 "a" 以追加模式打开,...写入到文件中的任何数据将自动添加到末尾 文件关闭 close()方法完成文件按关闭 始终确保你显式关闭每个打开的文件,一旦它的工作完成你没有任何理由保持打开文件。...如果没有指定 size 或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时,就会产生问题。反之,会尽可能按比较大的 size 读取和返回数据。...I love Python I love shiyanlou >>> fobj.close() 文件写入 让我们通过 write() 方法打开一个文件然后我们随便写入一些文本。...'score'没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。
1: type() 我们知道动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。...我们知道ORM即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。...让我们来尝试编写一个ORM框架。 编写底层模块的第一步,就是先把调用接口写出来。...Python解释器首先在当前类User的定义中查找metaclass,如果没有找到,就继续在父类Model中查找metaclass, 如果找到了,就使用Model中定义的metaclass的ModelMetaclass...在当前类(比如User)中查找定义的类的所有属性,如果找到一个Field属性,就把它保存到一个__mappings__的dict中,同时从类属性中删除该Field属性,否则,容易造成运行时错误(实例的属性会遮盖类的同名属性
领取专属 10元无门槛券
手把手带您无忧上云