根据不同的实例自动获取类名和属性(通用显示工具)
2017-09-03 17:10
316 查看
本文内容纯属自己理解,如有错误欢迎指正!
一、特殊类属性
还有个比较重要的内置函数:
getattr(obect,key)获取’object对象’的’key’属性
二、通用显示工具的实现
保存为classtools的模块:
保存为person的类,这是一个类的最终形式
一、特殊类属性
instance.__class__显示类的链接
instance.__class__.__name__显示类的名称
object.__dict__提供对象的属性字典,是一个键值对
还有个比较重要的内置函数:
getattr(obect,key)获取’object对象’的’key’属性
>>> from person import Person >>> bob = Person('Bob Smith') >>> bob.__class__ <class 'person.Person'> >>> bob.__class__.__name__ 'Person' >>> for key in bob.__dict__: print(key,'====',bob.__dict__[key]) name ==== Bob Smith job ==== None pay ==== 0 >>> for key in bob.__dict__: print(key,'====',getattr(bob,key)) name ==== Bob Smith job ==== None pay ==== 0 >>>
二、通用显示工具的实现
保存为classtools的模块:
class AttrDisplay: def gatherAttrs(self): attrs = [] for key in sorted(self.__dict__): attrs.append('%s=%s' % (key,getattr(self,key))) return ','.join(attrs) #以上内容获取了最底层类的属性,感觉应该是这个类的键和值 def __str__(self): return '[%s:%s]' % (self.__class__.__name__,self.gatherAttrs())#自动获取类的名称和该类的属性。 #就这么简单,根据不同的实例自动获取类名和属性。 #下边是测试代码,可以忽略了 if __name__ == '__main__': class TopTest(AttrDisplay): count = 0 def __init__(self): self.attr1 = TopTest.count self.attr2 = TopTest.count+1 TopTest.count += 2 class SubTest(TopTest): pass X,Y = TopTest(),SubTest() print(X) print(Y)
保存为person的类,这是一个类的最终形式
from classtools import AttrDisplay #导入模块中AttrDisplay类 class Person(AttrDisplay):#继承AttrDisplay类 def __init__(self,name,job=None,pay=0): self.name = name self.job = job self.pay = pay def lastname(self): return self.name.split()[-1] def giveRaise(self,percent): self.pay = int(self.pay*(1+percent)) class Manager(Person): def __init__(self,name,pay):#初始化manager类 Person.__init__(self,name,'mgr',pay)#通过继承Person类,目的是自动提供job = 'mgr' def giveRaise(self,person,bouns=.10): Person.giveRaise(s 4000 elf,person+bouns)#因为继承了AttrDisplay类,自动调用__str__打印相关内容,所以这里省略了 if __name__ == '__main__': bob = Person('Bob Smith') sue = Person('Sue Jones',job = 'dev',pay = 100000) print(bob) print(sue) print(bob.lastname(),sue.lastname()) sue.giveRaise(.10) print(sue) tom = Manager('Tom Jones',50000) tom.giveRaise(.10) print(tom.lastname()) print(tom)
相关文章推荐
- Python类中实例属性的通用显示工具
- GridView根据获取的值显示不同内容
- ios 根据类名获取类名的属性
- 用__dict__列出实例属性的通用工具
- 根据类名自动创建实例
- C#根据类名获取属性名和DESCRIPTION值
- LigerUi中Grid表记录根据条件显示不同颜色和不同内容!(实例)
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 演示cxGrid每一行根据业务逻辑显示不同图片的实例
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- ecshop不同城市显示不同商品之后台前端根据ip获取城市并屏蔽商品
- 通过反射根据类名获取到类的实例
- GridView根据获取的值显示不同值
- iOS runtime 根据类名获取属性的类型和名称
- android linearLayout 根据不同的分辨率自动调整 显示大小
- Java反射,根据类名创建带参数的实例(获取参数类型,参数等)
- Java反射,根据类名创建带参数的实例(获取参数类型,参数等)
- 一款兼容性好,自动变化的javascript 祝贺词代码(根据不同的节日自动显示不同的祝贺词)
- ReportStudio进阶教程(一) - 条件样式:根据属性显示不同的样式
- 使用基于ThinkPHP3.2.3的ThinkAdmin创建手机电脑通用的表白墙(二)自动判断设备以显示不同界面