python—反射

写作时间:2022.1.20

反射简而言之就是可以通过字符串的形式来操作对象的属性和方法。

反射又叫映射、自省,它包括四个主要的函数:

setattr()、delattr()、hasattr()、getattr()

关于反射的用途,假设别人给你一个实例化的对象person,然后你需要判断这个实例是否有一个具体的属性"sex",用if person.sex语句去判断的话直接会报错,程序也就停止运行了,这时可以用python反射相关函数。

hasattr(实例名称,str(xxx))

hasattr(实例名称,str(属性名))来判断一个实例是否含有某一属性:

hasattr(实例名称,str(方法名))来判断一个实例是否含有某一方法:

getattr(实例名称,str(xxx))

getattr(实例名称,str(属性名))可以用来获取一个实例某一个具体属性的值。

getattr(实例名称,str(属性名))可以用来获取一个实例的一个方法,注意此时拿到的是方法,执行的话需要调用:

setattr(实例名称,xxx,xxx)

setattr(实例名称,str(属性名),属性值)可以为实例增加新的属性。

setattr(实例名称,str(类名),属性值)可以为类增加新的属性。

setattr(实例名称,str(方法名),方法)可以为实例增加新的方法,这里注意增加新的方法之后调用的时候要给定实例,因为我们增加的方法是要和特定实例绑定在一起的,没绑定的实例没有新增加的方法。

setattr(实例名称,str(类名),方法)可以为整个类增加新的方法,这时候所有实例的对象都会拥有新增加的方法,之前创建过的实例和之后要创建的实例都有这个新增加的方法。

delattr((实例名称,str(类名),方法))

delattr(实例名称,str(属性名))可以删除实例的某一属性。

delattr不能删除整个类的某一初始化属性。

__name__

下面这个例子中,当前执行的文件是反射.py,可以看到__name__=__main___

在其他文件中导入上面的反射.py,下图中当前执行的文件时123.py,可见__name__=反射,也就是说,如果是被其他模块导入执行的,__name__=模块名

动态导入

在一个文件中(动态导入.py)导入另一个文件(123213.py)的内容的方式。

发表回复

相关推荐

掌故异闻之苗女变婆传说

在广西的罗城,曾经流传着“变婆”的传说。传说中有些苗族女子会成为变婆,在她们过世下葬之后会破棺而出,在深山里游荡,久而 ...

· 5秒前

《經典詠流傳》第一到第四季,最為經典十首歌曲

央視《經典詠流傳》,很多詩詞改編的歌曲在這個節目上為世人所知,並且傳唱開來。這個節目不僅讓我們享受到很多膾炙人口的歌...

· 45秒前

胸大=庸俗?時尚博主們的經驗告訴你,豐滿的女人更加迷人可愛

嗨咯,大傢好呀~不會吧,不會吧,難道你真的以為大胸妹紙穿衣沒有煩惱?相信很多人都會認為大胸妹紙不會有什麼穿衣的煩惱,隨...

· 1分钟前

深圳配眼鏡去哪裡更有性價比?深漂15年的近視眼告訴你答案!

身為一個在深圳工作瞭15年的資深IT男,我不僅從一個毛頭小子變成瞭準中年大叔,也從一個成天挨罵的職場新人成長為現在負責20...

· 1分钟前

拍立得相紙怎麼安裝,如何保存?

相紙對光線極為敏感,一旦裝入拍立得使用,切勿再打開相機的後背,否則相紙會因為曝光而作廢,無法再進行拍攝。而不同品牌的...

· 2分钟前