首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python中内置函数getatrr()、setattr()、hasattr()、delattr()作用

内置函数hasattr(object, name)用来判断对象是否包含对应属性。如果包含,则返回True,否则返回False。 ...内置函数getattr(object, name[, default]) 用来获取属性值。如果属性不存在,则返回default,没有指定default时,抛出异常AttributeError。 ...直接使用object.name来读写属性值,需要捕捉异常AttributeError来处理属性不存在情况,相比之下getattr()、setattr()、hasattr()要简洁很多。 ...还有,有时要访问属性名字,是根据情况动态决定,比如根据用户输入得到一个字符串。这个时候如果要使用object.name来访问数据,需要借助eval()和objcet....__name__ + "." + attr1_str),而且要处理异常,代码既难看又长。

1.2K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python基础学习15----异常处理

    1.异常类型 异常类型多种多样,常见异常有: AttributeError 试图访问一个对象没有属性,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件...解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误基类 StopIteration 迭代器没有更多值 GeneratorExit...对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误基类 IOError 输入/输出操作失败 OSError...操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询基类 IndexError 序列中没有此索引...(index) KeyError 映射中没有这个键 MemoryError 内存溢出错误(对于Python 解释器不是致命) NameError 未声明/初始化对象 (没有属性) UnboundLocalError

    1.6K10

    Python基础 | 新手学Python时常见语法错误和异常

    文件名和行号也会被输出,以便输入来自脚本文件时你能知道去哪检查。...AttributeError:当试图使用一个对象没有属性或方法时 In [8]: dic = {'key1':'var1', ...: 'key2':'var2'} In [9...:')) ValueError: invalid literal for int() with base 10: 'a' 比如当我们使用int对输入对象进行转化为整数时,输入对象是字符串时,这是一个不合适参数...断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误基类 IOError 输入/输出操作失败...) KeyError 映射中没有这个键 MemoryError 内存溢出错误(对于Python 解释器不是致命) NameError 未声明/初始化对象 (没有属性) UnboundLocalError

    7.1K41

    python『学习之路03』反射

    所以呢,我们就需要一个方法,可以动态匹配类中 # 方法和用户输入字符串是否相同 # print(hasattr(d,choice)) # 动态匹配类中是否有和用户输入一致属性 # #...加上() 括号就可直接调用了 # so 动态匹配反射版: choice = input(">>>: ").strip() # if hasattr(d,choice): # 通过hasattr 去判断用户输入是否和对象属性有一致...# 如果用户输入数据在d中没有对应对象映射,那么就走else --- > age --- >print 22 ---- > name = yaya # # setattr(d,choice,...no attribute 'name' if hasattr(d,choice): getattr(d,choice) # ---- >> 判断str是否有对应属性对象中,有就打印 else...: # ---- >> 没有,就给对象添加该属性 # setattr(d,choice,None) # ---- >> 给对象设置属性值None # v = getattr(d,choice

    28230

    python json.loads 中文_Python 完美 json loads

    为了对付表单提交时参数多和 json 结构复杂情况,我写了一个名为 recursive_json_loads 处理函数来对请求对象递归调用 json.loads() 以期能够一次性将所有参数转化为更好用...后来又发现了 web.py Storage 对象,使这个函数越发好用起来。...k=0) 有一点需要注意是,对于传了参数而没有传值情况(?k=),k 值会是 ”,而且 isinstance(”, str) 会返回 True。...= ” and not isinstance(data.k, int): return error() 因为 Python 会把很多种如 len() 为零对象布尔值判断为 False,所以上面始终没有使用...补充,Storage 类一个缺点是:他有 __dict__ 属性,但该属性永远为空 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    76520

    Python进阶教程笔记(三)类特殊方法

    二、类__str__ 和 __repr__方法 对于Python内建对象,比如int、dict、list等,通过str()方法,可以把这些对象转换为字符串对象输出。...这其实是对象内建方法__str__返回。 通过dir()方法,我们可以把对象所有方法打印出来。...>>> bob 而对于int、list等对象,直接输入变量也可得到可读结果。...这是因为 Python 定义了__str()__和__repr__()两种方法,__str()__用于显示给用户,而__repr__()用于显示给开发人员,当使用str()时,实际调用是__str__...last): AttributeError: 'Student' object has no attribute 'age' __slots__目的是限制当前类所能拥有的属性,避免因为外部属性操作导致类属性越来越难以管理

    92541

    Python正则表达式

    匹配来自字符集任意单一字符 [aeiou] [...x-y...] 匹配x-y范围内任意单一字符 [0-9] [^...]...当使用正则表达式时,一对圆括号可以实现以下任意一个(或者两个)功能: 对正则表达式进行分组; 匹配子组 常见正则表达式属性 函数/方法 描述 仅仅是re模块 compile 使用任何可选标记来编译正则表达式模式...num特定子组 groups 返回一个包含所有匹配子组元祖(没有成功,返回空元组) groupdict 返回一个包含所有匹配命名子组字典,所有的子组名称作为字典键 常用模块属性 re.I...如果给定分隔符不是使用特殊符号来匹配多重模式正则表达式,那么re.split()与str.split()工作方式相同,例子如下 >>> re.split(':','str1:str2:str3') [...'str1', 'str2', 'str3']

    1.6K90

    Python3内置函数表.md

    .getattr 获取对象属性值 print(getattr(test,'x')) #1024 print(getattr(test,'e','实例化对象没有 e 属性')) #有实例化对象没有...e 属性 #18.setattr 设置对象属性值 setattr(test,e,'Hello world') print(getattr(test,'e','实例化对象没有 e 属性')) #hello...Python列表案例 补充: Python 拷贝对象(深拷贝deepcopy与浅拷贝copycopy.copy 浅拷贝 只拷贝父对象,不会拷贝对象内部对象。...尝试访问未知对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointError 浮点计算错误 GeneratorExit generator.close()...方法被调用时候 ImportError 导入模块失败时候 IndexError 索引超出序列范围 KeyError 字典中查找一个不存在关键字 KeyboardInterrupt 用户输入中断键

    1.4K20

    2022年最新Python大数据之Python基础【九】面向对象与继承

    # AttributeError: 'Person' object has no attribute 'name'\ # print(p1.name, p1.age, p1.gender) # 为什么没有属性呢...18 女 p2 = Person() # AttributeError: 'Person' object has no attribute 'name' # 哪怕是在类内部添加实例属性,两个对象之间没有任何关系...,就需要添加其属性,这个时候,没有办法获取对象名称. 2、__init__()方法 __init__()方法在对象创建完成后,初始化对象时,自动调用 在init方法中添加属性,由于每个对象都会执行该方法...,但是所有的对象包含属性类别相同 # 这种形式下一定要给每一个对象单独赋值,或者给init方法中属性一些默认值,否则会报错 4、__str__()方法 在类内部实现__str__()方法,他会在我们讲对象转换为....在类中添加方法, 充电 听歌 打电话 玩游戏 3.每个手机都有初始电量,并且在创建对象时可以手动输入电量 4.充电可以输入充电时长, 充电1小时获得20个单位电量 5.听歌(15) 打电话

    31210

    Python常见编程基础问题总结

    跳转至错误处理代码, Python 内置错误类型 IOError:输入输出异常 AttributeError:试图访问一个对象没有属性 ImportError:无法引入模块或包,基本是路径问题 IndentationError...深拷贝、浅拷贝区别 Python 中大多数对象,比如列表 list、字典 dict、集合 set、numpy 数组,和用户定义类型(类),都是可变。...浅拷贝(copy):拷贝父对象,不会拷贝对象内部对象(拷贝可以理解为创建内存)。...使用copy 模块中 copy() 函数,b = a.copy(), a 和 b 是一个独立对象,但他们对象还是指向统一对象(是引用)。...而对于数字、字符串以及其它“原子”类型(没有对象),没有拷贝一说,产生都是原对象引用。 看一个示例程序,就能明白浅拷贝与深拷贝区别了: #!

    1K20

    流畅 Python 第二版(GPT 重译)(六)

    当 Python 控制台或调试器显示一个对象时,你会得到这个。 str() 返回一个表示用户想要看到对象字符串。当你print()一个对象时,你会得到这个。...另一个你可能想要保留特殊每实例属性是__weakref__,这对于对象支持弱引用是必要(在“del 和垃圾回收”中简要提到)。该属性默认存在于用户定义类实例中。...从那篇文章中,我借用了“开发者想要看到方式”和“用户想要看到方式”这两个简洁描述,用于定义repr()和str()在“对象表示”中。...¹ 来自 Faassen 博客文章“什么是 Pythonic?” ² 我在这里使用eval来克隆对象只是为了说明repr;要克隆一个实例,copy.copy函数更安全更快。...② zip生成一个由每个可迭代参数中项目组成元组生成器。如果您对zip不熟悉,请参阅“了不起 zip”。在①中,需要进行len比较,因为zip在其中一个输入耗尽时会停止生成值而没有警告。

    14810

    【Python之旅】第四篇(二):Pyt

    在Python程序执行过程中,难免会出现异常情况,如果做是跟用户交互程序,当用户输入不可接受内容时,在可预见范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中那些提示语句...,毕竟那些语句只适合给程序员做调试参考,对用户没有多大价值。...因此这就需要了解Python常见异常了。     当然,我们也可以制作自己异常,当用户输入满足或不满足我们需求时,就可以触发这些异常,以使我们写程序更加人性化。...试图访问一个还未被设置局部变量,基本上是由于另有一个同名全局变量,导致你以为正在访问它 AttributeError 试图访问一个对象没有属性,比如myInst.foo,但是myInst没有属性...:试图访问一个对象没有属性,比如myInst.foo,但是myInst没有属性foo >>> class myClass(): ...

    74140

    10-面向对象2

    类 获取对象信息 type()函数 获取对象类型,可以使用type()函数: #基本类型 >>> type(123) >>> type('str') <class 'str...()函数,它返回一个包含字符串list,比如,获得一个str对象所有属性和方法: >>> dir('ABC') ['__add__', '__class__',..., '__subclasshook...True >>> getattr(obj, 'y') # 获取属性'y' 19 >>> obj.y # 获取属性'y' 19 如果试图获取不存在属性,会抛出AttributeError错误: >>>...__str__(),而是__repr__(),两者区别是__str__()返回用户看到字符串,而__repr__()返回程序开发者看到字符串,也就是说,__repr__()是为调试服务。...(args)) 当用户定义一个class User(Model)时,Python解释器首先在当前类User定义中查找metaclass,如果没有找到,就继续在父类Model中查找metaclass,找到了

    1.5K20

    python 面向对象基础语法

    、函数 都是对象 在 Python 中可以使用以下两个方法验证: 在 标识符 / 数据 后输入一个 ....提示Cat类没有 name drink等属性。...提示 在日常开发中,不推荐在 类外部 给对象增加属性 如果在运行时,没有找到属性,程序会报错 对象应该包含有哪些属性,应该 封装在类内部 4.2 初始化方法 - 构造方法 当使用 类名() 创建对象时...内置方法和属性 序号 方法名 类型 作用 01 __del__ 方法 对象被从内存中销毁前,会被 自动 调用 02 __str__ 方法 返回对象描述信息,print 函数输出使用 5.1 __del...输出 对象变量 时,能够打印 自定义内容,就可以利用 __str__ 这个内置方法了 注意:__str__ 方法必须返回一个字符串 ## 没有使用 __str__ 方法之前,默认返回内存地址

    46330

    python2.x和python3.x

    Python3​​.0版本,常被称为Python3000,或简称Py3k。相对于Python早期版本,这是一个较大升级。 为了不带入过多累赘,Python3.0在设计时候没有考虑向下相容。...Python 3.0变化主要在以下几个方面: print 函数 print语句没有了,取而代之是print()函数。Python2.6与Python2.7部分地支持这种形式print语法。...一种纯旧式文字: “str对象,存储 bytes 。如果你使用一个 “u” 前缀,那么你会有一个“unicode”对象,存储是code points。...> b = b'china' >>> type(b) str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (...同时去掉还有dict.has_key(),可以用in替代。 通过input()解析用户输入 Python 3改进了input()函数,这样该函数就会总是将用户输入存储为str对象

    1K20

    python面向对象多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04

    面向对象内置魔法函数 __str__ ''' __str__ 会在对象被转为字符串时,转换结果就是这个函数返回值 使用场景:我们可以利用该函数来自定义,对象是打印格式 ''' class...str(p) # 没有写print 在控制台也输出了 __str__ run # __str__ run 将对象以指定格式输出 # print打印对象时内存地址,没什么意义,此时就可以利用__str...需要开启更大内存区域,将原始属性赋值过去 问题:如果开启容量太大(为了效率牺牲了空间),将造成内存浪费 解决方案:在创建对象是告诉系统这个对象只有哪些属性,也就是固定了对象属性数量,这样就可任意要多少开多少...__dict__) # 报错,可变字典也被省掉了(名称空间连开都不开了),AttributeError: 'Person' object has no attribute '__dict__' 该属性是一个类属性...语法原理 __getattribute__ 该函数也是用来获取属性 在获取属性时如果存在__getattribute__则先执行该函数,如果没有拿到属性则继续调用__getattr__函数,如果拿到了则直接返回

    67040

    定制类和黑魔法

    hasattr(object, name):用来检测object(适用于类、文件、模块或对象,一切皆对象)中有没有一个name字符串对应方法或属性。...__add__(n) >>> print(s) 7/9   代码中__repr__ = __str__含义是在类被调用(实例化对象)时,向变量(即实例化对象)提供__str__()里内容。   ...,对象也只能使用那些属性对象不能自己去创建新属性(因为没有了__dict__),也不能修改类属性,因为受类控制。     ...关于__slots__一个常见误区是它可以作为一个封装工具来防止用户给实例增加新属性。尽管使用__slots__可以达到这样目的,但是这个并不是它初衷。...seek # 对象属性类型是字符串 read 2018-10-18 17:35:01: abcde33fgh 2018-10-18 17:

    46810
    领券