您的位置:首页 > 其它

根据不同的实例自动获取类名和属性(通用显示工具)

2017-09-03 17:10 316 查看
本文内容纯属自己理解,如有错误欢迎指正!

一、特殊类属性

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)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐