@property
pyton内置的@property装饰器可以把一个方法变成一个属性
python<br />class User:<br /> def __init__(self):<br /> self.username='admin'<br /> self.password='123456'<br /><br /> @property<br /> #pyton内置的@property装饰器可以把一个方法变成一个属性,通过user.info调用<br /> def info(self):<br /> return [self.username,self.password]<br />user= User()<br />print(user.info)<br />
# getattr()
如果存在__getattr__()的定义,访问object不存在的属性时会调用该方法,相当于php的__get()魔法函数
不存在定义时,访问不存在的属性会报 AttributeError
python<br />class User:<br /> def __init__(self):<br /> self.uname='admin'<br />if __name__ == "__main__":<br /> user = User()<br /> print(user.passwd)<br /><br />#output:<br />#AttributeError: 'User' object has no attribute 'passwd'<br /><br />
python<br />class User:<br /> def __init__(self):<br /> self.uname='admin'<br /> def __getattr__(self, item):<br /> print(item,'not exits')<br /> return self.uname<br />if __name__ == "__main__":<br /> user = User()<br /> print(user.passwd)<br />#output:<br />#passwd not exits<br />#admin<br /><br />
# getattribute()
__getattribute_是属性访问拦截器,就是当这个类的属性被访问时,会自动调用类的__getattribute__方法,相当于一个filter
python<br />class User:<br /> def __init__(self):<br /> self.uname='admin'<br /> def __getattribute__(self, item):<br /> print(item,'\t',end='')<br /> if item == 'uname':<br /> return 'admin'<br /> else:<br /> return 'not exits'<br />if __name__ == "__main__":<br /> user = User()<br /> print(user.uname)<br /> print(user.passwd)<br /><br />#output:<br />#uname admin<br />#passwd not exits<br />
# python对象自省机制
python<br />class User:<br /> uname='Admin'<br /> def __init__(self):<br /> self.uname='admin'<br /><br />if __name__ == "__main__":<br /> user = User()<br /> print(user.uname)<br /> #打印对象的全部属性和值<br /> print(user.__dict__)<br /> #打印类的全部属性和值<br /> print(User.__dict__)<br /> #打印对象里的所有属性(只会打印出属性名称,不打印属性的值)<br /> print(user.__dir__())<br /><br />#output:<br /># admin<br /># {'uname': 'admin'}<br /># ['uname', '__module__', '__init__', '__dict__', '__weakref__', '__doc__', '__repr__', '__hash__', '__str__', '__getattribute__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__new__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__']<br /># {'__module__': '__main__', 'uname': 'Admin', '__init__': <function User.__init__ at 0x000001EF86143040>, '__dict__': <attribute '__dict__' of 'User' objects>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': None}<br /><br />