#内省工具是特殊的属性和函数,允许我们访问对象实现的一些内部机制
class Person:
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 giveRaist(self, percent):
self.pay=int(self.pay*(1+percent))
def __str__(self):
return '[Person: %s, %s]'%(self.name, self.pay)
class Manager(Person):
def __init__(self, name, pay=0):
self.person=Person(name, 'mgr', pay)
def giveRaist(self, percent):
self.person.giveRaist(percent+1)
def __getattr__(self, attr):
return getattr(self.person, attr)
def __str__(self):
return 'sss'+str(self.person)
bob=Person('bob li', 'a')
sue=Person('sue zhang', 'b', 10000)
tom=Manager('tom zhao', 20000)
class Department:
def __init__(self, *args):
self.members=list(args)
def addMember(self, person):
self.members.append(person)
def giveRaist(self, percent):
for person in self.members:
person.giveRaist(percent)
def showAll(self):
for person in self.members:
print(person)
deve=Department(bob, sue)
deve.addMember(tom)
deve.giveRaist(1.1)
deve.showAll()
#内省工具是特殊的属性和函数,允许我们访问对象实现的一些内部机制
#instance.__class__属性提供了一个从实例到创建他的类的连接
print(deve.__class__, deve.__class__.__name__) #<class '__main__.Department'> Department
print(bob.__class__) #<class '__main__.Person'>
print(tom.__class__) #<class '__main__.Manager'>
#class.__bases__属性获取类的超类元祖
print(Manager.__bases__) #(<class '__main__.Person'>,)
#instance.__dict__属性提供一个包含全部属性的字典
print(bob.__dict__) #{'name': 'bob li', 'job': 'a', 'pay': 0}
for key in bob.__dict__:
print(key,'=>',getattr(bob, key))
class AttrDisplay():
def gatherAtters(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.gatherAtters())
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,y) #[TopTest: attr1=0, attr2=1] [SubTest: attr1=2, attr2=3]
class Person:
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 giveRaist(self, percent):
self.pay=int(self.pay*(1+percent))
def __str__(self):
return '[Person: %s, %s]'%(self.name, self.pay)
class Manager(Person):
def __init__(self, name, pay=0):
self.person=Person(name, 'mgr', pay)
def giveRaist(self, percent):
self.person.giveRaist(percent+1)
def __getattr__(self, attr):
return getattr(self.person, attr)
def __str__(self):
return 'sss'+str(self.person)
bob=Person('bob li', 'a')
sue=Person('sue zhang', 'b', 10000)
tom=Manager('tom zhao', 20000)
class Department:
def __init__(self, *args):
self.members=list(args)
def addMember(self, person):
self.members.append(person)
def giveRaist(self, percent):
for person in self.members:
person.giveRaist(percent)
def showAll(self):
for person in self.members:
print(person)
deve=Department(bob, sue)
deve.addMember(tom)
deve.giveRaist(1.1)
deve.showAll()
#内省工具是特殊的属性和函数,允许我们访问对象实现的一些内部机制
#instance.__class__属性提供了一个从实例到创建他的类的连接
print(deve.__class__, deve.__class__.__name__) #<class '__main__.Department'> Department
print(bob.__class__) #<class '__main__.Person'>
print(tom.__class__) #<class '__main__.Manager'>
#class.__bases__属性获取类的超类元祖
print(Manager.__bases__) #(<class '__main__.Person'>,)
#instance.__dict__属性提供一个包含全部属性的字典
print(bob.__dict__) #{'name': 'bob li', 'job': 'a', 'pay': 0}
for key in bob.__dict__:
print(key,'=>',getattr(bob, key))
class AttrDisplay():
def gatherAtters(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.gatherAtters())
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,y) #[TopTest: attr1=0, attr2=1] [SubTest: attr1=2, attr2=3]