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

反射(高大上)、类的内置方法

时间:2017-11-24 15:14:16      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:col   ini   modules   必须   getattr   print   function   方法   静态变量   

反射

对象的反射

类的反射

模块的反射

本模块的反射:找到本模块sys.modules[__name__]

python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

hasattr() 函数用于判断对象是否包含对应的属性。
getattr() 函数用于返回一个对象属性值。
setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在。
delattr 函数用于删除属性。
delattr(x, foobar) 相等于 del x.foobar。
class Foo:
    f = 类的静态变量
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say_hi(self):
        print(hi,%s%self.name)

obj=Foo(egon,73)

#检测是否含有某属性
print(hasattr(obj,name))     #输出结果:True
print(hasattr(obj,say_hi))   #输出结果:True

#获取属性
n=getattr(obj,name)
print(n)   #输出结果:egon
func=getattr(obj,say_hi)
func()   #输出结果:hi,egon


#设置属性
setattr(obj,sb,True)
setattr(obj,show_name,lambda self:self.name+sb)
print(obj.__dict__)  
#输出结果:{‘name‘: ‘egon‘, ‘age‘: 73, ‘sb‘: True, ‘show_name‘: <function <lambda> at 0x00000194A8817048>} print(obj.show_name(obj)) #删除属性 delattr(obj,age) delattr(obj,show_name) print(obj.__dict__)
#输出结果:{‘name‘: ‘egon‘, ‘sb‘: True}

 

hasattr(对象名,属性名)  返回True或False
属性值 = getattr(对象名,属性名)
方法的内存地址 = getattr(对象名,方法名)
方法的内存地址()

 

反射(高大上)、类的内置方法

标签:col   ini   modules   必须   getattr   print   function   方法   静态变量   

原文地址:http://www.cnblogs.com/jassin-du/p/7890233.html

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