Python动态获取和设置对象属性

2025-11-20 16:10:30

1、打开Python开发工具IDLE,新建‘attr.py’文件,并写代码如下:

class animal():

    def __init__(self,zhonglei,name):

        self.zhonglei = zhonglei

        self.__name = name

    @property

    def name(self):

        return self.__name

animal1 = animal('cat','xiaohua')

print (getattr(animal1,'name'))

定义了animal类,__name代表私有字段,私有字段一般通过属性方式来访问,定义了name属性,但是当属性未知时,就要通过getattr方式来访问

Python动态获取和设置对象属性

2、F5运行程序,打印出name属性值,getattr函数传递两个参数一个是对象,一个是属性名,注意是字符串格式,而不是变量格式

Python动态获取和设置对象属性

3、类比一下不用getattr的方式,代码如下:

class animal():

    def __init__(self,zhonglei,name):

        self.zhonglei = zhonglei

        self.__name = name

    @property

    def name(self):

        return self.__name

animal1 = animal('cat','xiaohua')

print (getattr(animal1,'name'))

print (animal1.name)

Python动态获取和设置对象属性

4、F5运行程序,同样打印出name的属性值,可能有疑惑,为什么还要用更复杂的getattr方式,这就是当使用别人写好的框架,无法知道都有哪些字段属性时候使用。

Python动态获取和设置对象属性

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 = name

animal1 = animal('cat','xiaohua')

setattr(animal1,'setname','xiaohuang')

print (getattr(animal1,'name'))

Python动态获取和设置对象属性

6、F5运行程序,setattr把程序初始化的name值改了

Python动态获取和设置对象属性

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 = name

animal1 = animal('cat','xiaohua')

setattr(animal1,'setname','xiaohuang')

print (getattr(animal1,'name'))

print (hasattr(animal1,'name'))

print (hasattr(animal1,'setname'))

print (hasattr(animal1,'abc'))

Python动态获取和设置对象属性

8、F5运行程序,animal1对象有name和setname属性,没有abc属性

Python动态获取和设置对象属性

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢