python 学习汇总64:类属性方法(初级学习- tcy)
发布日期:2021-06-29 14:47:23 浏览次数:2 分类:技术文章

本文共 4769 字,大约阅读时间需要 15 分钟。

类属性方法 2018/11/20==================================================================# 1.1.属性# 1)类型对象属性t.__doc__ 文档字符串t.__name__ 类名称t.__bases__ 由基类构成的元祖t.__module__ 定义类的模块名称t.__dict__ 包含类方法和变量的字典t.__abstractmethods__ 抽象方法名称的集合# 2)实例属性i.__class__ 实例所属的类i.__dict__ 保存实例数据的字典m.__func__ 实现方法的函数对象m.__self__ 与方法相关联的实例==================================================================# 1.2.方法__len__(self) : 返回含项目的数量__getitem__(self, key) : 返回所给键对应值如方法实例进行分片操作__setitem__(self, key, value) : 存储和key相关的value__delitem__(self, key) : 删除键值对应元素(使用del语句时被调用)__getattribute__(self, name) : self 相关特性时使用超类getattribute方法__getattr__(self, name) : 获得特性 name__setattr__(self, name, value): 特性 name 赋值__delatr__(self, name) : 删除特性 name__metaclass__ = type==================================================================2.1.类函数hasattr(object, name) #判断对象属性方法存在bool# print(hasattr(ab1,'x'),hasattr(a1, "printa")) #True Truegetattr(object, name[,default]) #获取对象属性或方法# print('d=', getattr(ab1, 'x',None),';d1=',getattr(b1, 'printb',None))#d= x ;d1= 
getattr(ab1, 'printb',None)() #执行对象方法setattr(object, name, values) #对象属性赋值(修改或创建)# setattr(ab1, "age", "18")# print(ab1.age)==================================================================2.2.动态绑定属性方法# 1)实例绑定属性:class Student():passs = Student()s.name = 'Michael' # 动态给实例绑定一个属性# 2)实例绑定一个方法:def set_age(self, age): # 定义一个函数作为实例方法self.age = agefrom types import MethodTypes.set_age = MethodType(set_age, s) # 给实例绑定一个方法s.set_age(25) # 调用实例方法s.age # 测试结果25# 注意:给一个实例绑定的方法,对另一个实例是不起作用# 3)所有实例都绑定方法,可以给class绑定方法:def set_score(self, score):self.score = scoreStudent.set_score = set_score #给class绑定方法所有实例均可调用:s.set_score(100)s.score #100==================================================================2.3 __slots__限制实例的属性# 1) 提高代码运行速度,依赖__dict__无效# 2) 只允许对Student实例添加name和age属性class Student(object):__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称def __init__(self,name,age):self.name=nameself.age=ages = Student() # 创建新的实例s.name = 'Michael' # 绑定属性'name's.age = 25 # 绑定属性'age'#s.score = 99 # 绑定属性'score' 错误# 注意 __slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的:==================================================================3.1.定义类的静态方法,类方法class MyClass:total = 10def __init__(self,x=20):self.x = xdef show(self):print('class show():x=',self.x,self.total)self.view('show...')def view(self,name):print('name=',name)@staticmethoddef s_show():print( '静态方法:无法访问total和x')@classmethoddef cls_show(cls):print ('类方法:(无法访问x) total=',cls.total)a=MyClass(222)a.age=22 #调用obj.__setattr__(‘name’,value)#del obj.name #删除属性调用 obj.__delattr__(‘name’)#obj.name #查找属性调用obj.__getattrribute__(‘name’)a.__dict__ #{'x': 222, 'age': 22}类实例变量a.__dict__['id']=1020120 #对实例的修改反应到局部__dict__属性中a.__class__ #
MyClass.__dict__.keys() #dict_keys(['__module__', ..., 'show', 'view', 's_show', 'cls_show'])a.__dir__() #['x', 'age', '__module__', 'show', 'view', 's_show',..., 'cls_show']===================================================================3.2.定义类,属性import mathclass Circle (object):def __init__ (self,radius):self. radius=radiusdef __getattr__ (self,name):if name=='area':return math.pi * self.radius **2elif name== 'perimeter':return 2*math.pi*self.radiuselse:return object.__getattr__ (self, name)def __setattr__(self,name,value):if name in ['area', 'perimeter']:raise TypeError{"%s is readonly" % name)object.___setattr__ (self,name,value)class point:def __init__(self, x=0, y=0): #构造方法self.x=xself.y=ydef getx(self):return self.xdef gety(self):return self.ydef setx(self,x):self.x=xdef sety(self,y):self.y=y# def getSize(self):# return self.x, self.y# def setSize(self,value):# self.x,self.y=value## size = property(getSize, setSize) #创建属性sizedef __setattr__(self, name, value):if name == "size":self.y, self.height = valueelse:self.__dict__[name] = valuedef __getattr__(self, name):if name == "size":return self.y, self.heightelse:raise AttributeErrorc=point()c.size=(2,3)print(c.x,c.y,c.size)======================================================================
第二部分:类属性查看 2018/11/20======================================================================1.类属性:getattr(Type, 'FTE');type.__dict__['FTE']======================================================================2.1.获取类属性列表# dir 返回当前范围的所有属性名称列表:dir(list) # ['__add__', ......, 'sort']# 使用 inspect 包功能来过滤:[i for i in dir(list) if inspect.isbuiltin(getattr(list, i))] #[''__new__',..., '__subclasshook__']# inspect.isfunction获取函数:[i for i in dir(list) if inspect.isfunction(getattr(list, i))] # ['_searchbases', ..., 'walktree']# 使用callable-获取可调用对象:[i for i in dir(inspect) if not callable(getattr(inspect, i))]# ['CO_GENERATOR', ..., 'types']# __dict__ 获取属性列表:list.__dict__.keys() # dict_keys(['__repr__', ..., 'sort'])=======================================================================

转载地址:https://chunyou.blog.csdn.net/article/details/84268630 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python 学习汇总65:eval,exec动态创建代码(初级学习- tcy)
下一篇:python 学习汇总63:获取类属性的列表(初级学习- tcy)

发表评论

最新留言

很好
[***.229.124.182]2024年04月22日 05时59分54秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

中科院刘康:低资源环境下的事件知识抽取 2019-04-29
提高软件工程技能的关键技术,这些资源赶紧收藏起来 2019-04-29
走进数据科学:最好是通过比网课更好的方法 2019-04-29
机器学习背后的数学支柱,这5本书帮你搞定! 2019-04-29
AI革命第一步:最容易被忽略但必不可少的物联网 2019-04-29
2020年开发运维工具清单:选择开发运维工具堆栈吧 2019-04-29
JavaScript中几乎一切都是对象:创建对象的三种方式 2019-04-29
躲不过的数学课:数据科学领域中需要多少数学知识? 2019-04-29
还在“收集”证书?学好数据科学,做项目才是第一位的 2019-04-29
来自星星的“他”:硅基文明会是怎样形成的? 2019-04-29
想做项目但毫无头绪?试试这7个有趣的开源机器学习项目! 2019-04-29
我是如何通过TensorFlow开发人员认证考试的? 2019-04-29
练就火眼金睛:Python助你一眼看穿社交媒体中的假新闻! 2019-04-29
Python程序员的圣经:《Python编程快速上手:让繁琐工作自动化》 2019-04-29
打造出色查询:如何优化SQL查询? 2019-04-29
效率提升法则:高效人士不会去做的4件事 2019-04-29
科技公司面试经:我是如何获得Facebook工作机会的? 2019-04-29
给年轻数据科学家:从新手小白到专家大师的进阶之路 2019-04-29
学会“偷懒”:优秀程序员是如何减少学习的? 2019-04-29
鸢尾花预测:如何创建机器学习Web应用程序? 2019-04-29