python面向对象内置方法关于属性篇
1、关于__xxxattr__之__getattr__、__setattr__、__delattr__
2、关于__xxxitem__之__getitem__、__setitem__、__delitem__
起步之attr,(attribute属性),我们可以通过对象来调用属性,如果调用的属性存在,那么我们将会得到这个属性,如果这个属性不存在但是不会报错(前提是我们写了__getattr__方法),将会调用__getattr__方法,与之类似的还有__getattribute__方法,
当我们在类中同时写了__getattr__和__getattribute__方法时,调用属性时将只会执行后者,无论这个属性是否存在都会执行,而__getattr__仅当属性不存在时才会被调用
慢走之__setattr__,这个方法比较神奇,只要属性被赋值便会执行这个方法,当对象实例化时如果其中有属性被赋值便会执行该方法,当为对象添加新属性时也会执行这个方法。通过这个特性,我们可以对添加的属性进行定制,比如只能添加int类型或者str类型的。。。然而这里面有坑。当通过self.key = value方式添加新属性时,将会产生循环调用,导致报错,所以这时我们可以通过操作属性字典的方式进行添加新属性。
完成之__delattr__,前面提到过属性的增删改查,当我们定义过__delattr__方法后,删除属性时将会调用该方法,此处有坑,不能在_delattr__方法内通过del self.item直接删除属性,否则还是会出现循环调用导致报错,多以还是通过操作字典的方式进行操作。
class Foo2(object):
def __init__(self):
self.name = 'ajune'
# 通过对象.属性的方式访问属性时才会调用
def __getattr__(self, item):
# 获取的属性不存在时将会调用该方法
print('__getattr__被调用')
# 当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,
# 除非__getattribute__在执行过程中抛出异常AttributeError
# def __getattribute__(self, item):
# # 无论属性是否存在都会调用该方法
# print('__getattribute__方法被调用')
def __setattr__(self, key, value):
print('__setattr__方法被调用')
# self.__dict__[key] = value
# self.key = value # 产生循环调用,无法设置
# 通过函数的实现,实现对设置的属性进行限定
if type(value) is str:
print('开始设置')
# self.k=v #触发__setattr__
self.__dict__[key] = value.upper()
else:
print('必须是字符串类型')
def __delattr__(self, item):
print('__delattr__方法被调用')
# del self.item # 循环调用,报错
self.__dict__.pop(item)
啊啊啊啊啊啊啊啊。开始了__xxxitem__,这些东西就一句话,只用通过字典调用的方式才会执行下列的方法,没错你没听错,字典,这时可以类当做字典了,有没有感到很神奇?
class Fo1(object):
# 通过字典的方式使用属性才会执行
def __setitem__(self, key, value):
print('__setitem__执行')
self.__dict__[key] = value
def __getitem__(self, item):
print('__getitem__执行')
return self.__dict__[item]
def __delitem__(self, key):
print('__delitem__执行')
self.__dict__.pop(key)
fo1 = Fo1()
fo1['name'] = 'ajune'
# print(fo1.name)
print(fo1['name'])
del fo1['name']
python面向对象内置方法关于属性篇的更多相关文章
- python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)
面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...
- day34 反射、面向对象内置方法:如__str__、面向对象的软件开发
Python之路,Day21 = 反射.面向对象内置方法:如__str__.面向对象的软件开发 几个内置查看的方法使用 .__base__ 查看类的继承结构.mro() 对象找属性的顺序存在里面 -- ...
- python字符串内置方法
网上已经有很多,自己操作一遍,加深印象. dir dir会返回一个内置方法与属性列表,用字符串'a,b,cdefg'测试一下 dir('a,b,cdefg') 得到一个列表 ['__add__', ' ...
- python 字典内置方法get应用
python字典内置方法get应用,如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这 ...
- Python的内置方法,abs,all,any,basestring,bin,bool,bytearray,callable,chr,cmp,complex,divmod
Python的内置方法 abs(X):返回一个数的绝对值,X可以是一个整数,长整型,或者浮点数,如果X是一个复数,此方法返回此复数的绝对值(此复数与它的共轭复数的乘积的平方根) >>> ...
- 6.python字符串-内置方法列举
所谓内置方法,就是凡是字符串都能用的方法,这个方法在创建字符串的类中,下面是总结: 首先,我们要学习一个获取帮助的内置函数 help(对象) ,对象可以是一个我们创建出来的,也可以是创建对象的那个类, ...
- Python的内置方法
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...
- Python 面向对象 - 内置类方法
内置方法 内置方法 说明 __init__(self,...) 初始化对象,在创建新对象时调用 __del__(self) 释放对象,在对象被删除之前调用 __new__(cls,*ar ...
- python黑魔法 -- 内置方法使用
很多pythonic的代码都会用到内置方法,根据自己的经验,罗列一下自己知道的内置方法. __getitem__ __setitem__ __delitem__ 这三个方法是字典类的内置方法,分别对应 ...
随机推荐
- SQL SERVER表压缩
概述 SQL Server的主要性能取决于磁盘I/O效率,SQL Server .2008提供了数据压缩功能来提高磁盘I/O效率.表压缩意味着减小数据的磁盘占有量,所以压缩可以用在堆表.聚集索引的表. ...
- jQuery实现点击复制效果
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...
- 根据参数显示类别(三级联动,需要JSON数据)
根据参数显示类别(三级联动,需要JSON数据) Scripts/Category.js 调用方法: $(function () { BindCategory(); //默认绑定文本框中的值 BindC ...
- 织梦cms导航高亮显示栏目及首页的方法
直奔主题了,高亮显示教程适用于您具有一定的CSS基础才可以了,前提把高亮显示的样式写好,然后再开始高亮显示标签适用. <li {dede:field name=typeid runphp=&qu ...
- BZOJ4543 Hotel加强版(长链剖分)
题意 求一棵树上,两两距离相等的三个点的三元组(无序)的个数. 题解 转自 CaptainHarryChen 的博客 CODE 代码中的f,gf,gf,g对应题解中的num,waynum,waynum ...
- TDOA Delayed Tx 实现以及验证
在博文:https://www.cnblogs.com/tuzhuke/p/11638221.html 中描述了delayed tx实现方法,这里贴出全部delayed tx 代码以及对应验证代码 1 ...
- post提交主订单数据(gateway)实现httpapi
models.proto syntax = "proto3"; package services; import "google/protobuf/timestamp.p ...
- SpringMVC使用ResponseEntity实现文件下载,及图片base64的字节数组上传于下载
本文主要通过ResponseEntity<byte[]>实现文件下 该类实现响应头.文件数据(以字节存储).状态封装在一起交给浏览器处理以实现浏览器的文件下载. ResponseEntit ...
- MongoDB-3.2 oplog删除策略优化
MongoDB oplog是一个capped collection,创建capped collection时,createCollection可以设置size(最大字节数)和max(最大文档数)的参数 ...
- 采用非常规方法(非gprecoverseg) 恢复greenplum数据库
greenplum数据库中mirror的作用就是作为primary的备份存在.那么恢复down掉的mirror或primary时,是否可以直接复制文件从primary或mirror到对应的mirror ...