栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

测开之面向对象进阶篇・《属性自省》

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

测开之面向对象进阶篇・《属性自省》

我们可以通过 slots 属性来限制类实例的属性 只能绑定 slots 指定的属性。

自定义访问属性

可以定义下面的方法来自定义类实例的属性方法的含义。

object.__getatter__ : 当属性查找到在通常的地方 没有找到属性时调用object.__getattribute__: 查找属性时 第一时间会调用该方法object.__setattr__ 设置属性方法时 调用该方法设置的属性object.__delattr__ 删除属性
class Test:
 def __getattr__(self, item):
 print( 没有找到属性 触发 AttributeError 异常时会调用此方法 )
 def __getattribute__(self, item):
 print( 没有设置属性 会调用此方法 )
 object.__getattribute__(self, item)
 def __delattr__(self, item):
 print( 属性被删除了 )
 object.__delattr__(self, item)
 def __setattr__(self, key, value):
 print( 查看属性 首先会进入该方法 )
 object.__setattr__(self, key, value)
习题

了解了python的内置属性之后 我们来做一道习题 方便我们更好的理解内置属性。

自定义一个类
1、对这个类创建的对象 进行属性限制 对象只能设置这个三个属性 title money data
2、通过相关机制对设置的属性类型进行限制 title只能设置字符串类型数据
money设置为int类型数据 data可以设置为任意类型
3、通过相关机制实现 data 属性不能进行删除
4、当money设置的值少于0时 确保查询出来的值为0

class MyClass(object):
 __slots__ [ title , money , data ]
 def __init__(self, title, money, data):
 self.title title
 self.money money
 self.data data
 def __getattr__(self, item):
 return 类中未定义{}属性 .format(item)
 def __setattr__(self, key, value):
 # 判断 title 只能设置字符串
 if key title :
 if isinstance(value, str):
 super().__setattr__(key, value)
 else:
 raise TypeError( title 属性只能设置字符串 )
 # 判断 money 只能设置为 int
 elif key money :
 if isinstance(value, int):
 super().__setattr__(key, value)
 else:
 raise TypeError( money 属性只能设置为 int )
 else:
 super().__setattr__(key, value)
 def __getattribute__(self, item):
 # 获取 money 属性
 if item money :
 value super().__getattribute__(item)
 # 判断如果 money 的值小于0 则返回0
 if value 0:
 value 0
 return value
 return super().__getattribute__(item)
 def __delattr__(self, item):
 # 判断当 data 属性被删除时 raise 异常
 if item data:
 raise AttributeError( {0}属性不能被删除 .format(item))
 super().__delattr__(item)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号