码迷,mamicode.com
首页 > 其他好文 > 详细

反射:hasattr、getattr、setattr、delattr

时间:2018-05-18 20:08:07      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:删除   内存   init   需要   pytho   bin   一个   show   存在   

反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对象,都可以使用反射。

反射有四种方法:

hasattr:hasattr(object,name)判断一个对象是否有name属性或者name方法。有就返回True,没有就返回False

getattr:获取对象的属性或者方法,如果存在则打印出来。hasattr和getattr配套使用

    需要注意的是,如果返回的是对象的方法,返回出来的是对象的内存地址,如果需要运行这个方法,可以在后面添加一对()

setattr:给对象的属性赋值,若属性不存在,先创建后赋值

delattr:删除该对象指定的一个属性

hasattr 和getattr

技术分享图片
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo:
    def __init__(self):
        self.name = egon
        self.age = 51
    def func(self):
        print(hello)
egg = Foo()
print(hasattr(egg,name))  #先判断name在egg里面存在不存在
print(getattr(egg,name)) #如果为True它才去得到
print(hasattr(egg,func))
print(getattr(egg,func))  #得到的是地址
# getattr(egg,‘func‘)()  #在这里加括号才能得到,因为func是方法
if hasattr(egg,func):
 getattr(egg,func)()
else:
 print(没找到)
hasattr和getattr
技术分享图片
class Foo:
    def __init__(self):
        self.name = egon
        self.age = 51
    def func(self):
        print(hello)
egg = Foo()
setattr(egg,sex,)
print(egg.sex)
#
# 2.
def show_name(self):
    print(self.name+sb)
setattr(egg,sh_name,show_name)
egg.sh_name(egg)
show_name(egg)
#egonsb
#egonsb
setattr
技术分享图片
delattr(egg,name)
print(egg.name)
delattr

 

反射:hasattr、getattr、setattr、delattr

标签:删除   内存   init   需要   pytho   bin   一个   show   存在   

原文地址:https://www.cnblogs.com/zhaojingyu/p/9057589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!