1、打开Python开发工具IDLE,新建‘attr.py’文件,并写代码如下:class animal(): def __init__(self,zhonglei,name): self.zhonglei = zhonglei self.__name = name @property def name(self): return self.__nameanimal1 = animal('cat','xiaohua')print (getattr(animal1,'name'))定义了animal类,__name代表私有字段,私有字段一般通过属性方式来访问,定义了name属性,但是当属性未知时,就要通过getattr方式来访问
2、F5运行程序,打印出name属性值,getattr函数传递两个参数一个是对象,一个是属性名,注意是字符串格式,而不是变量格式
3、类比一下不用getattr的方式,代码如下:class animal(): def __init__(self,zhonglei,name): self.zhonglei = zhonglei self.__name = name @property def name(self): return self.__nameanimal1 = animal('cat','xiaohua')print (getattr(animal1,'name'))print (animal1.name)
4、F5运行程序,同样打印出name的属性值,可能有疑惑,为什么还要用更复杂的getattr方式,这就是当使用别人写好的框架,无法知道都有哪些字段属性时候使用。
5、除了getattr,还有setattr设置属性值,代码如下:class animal(): def __init__(self,zhonglei,name): self.zhonglei = zhonglei self.__name = name @property def name(self): return self.__name @name.setter def setname(self,name): self.__name = nameanimal1 = animal('cat','xiaohua')setattr(animal1,'setname','xiaohuang')print (getattr(animal1,'name'))
6、F5运行程序,setattr把程序初始化的name值改了
7、还有一个判断时候有厢咆廨炝某个属性的函数hasattr,有返回True,没有返回False.代码如下:class animal(): def __init__(self荑樊综鲶,zhonglei,name): self.zhonglei = zhonglei self.__name = name @property def name(self): return self.__name @name.setter def setname(self,name): self.__name = nameanimal1 = animal('cat','xiaohua')setattr(animal1,'setname','xiaohuang')print (getattr(animal1,'name'))print (hasattr(animal1,'name'))print (hasattr(animal1,'setname'))print (hasattr(animal1,'abc'))
8、F5运行程序,animal1对象有name和setname属性,没有abc属性