python基础-类的反射

1)反射是通过字符串方式映射内存中的对象。

  python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,

  改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。

 注意:类的反射不能使用类的私有方法

# -*- coding:utf-8 -*-
__author__ = 'shisanjun'

class Foo(object):
    def __init__(self):
        self.name="s"

    def func(self):
        return 'func'

obj=Foo()
#检查是否含有成员
print("----是否有成员-----")
print(hasattr(obj,"name"))
print(hasattr(obj,"func"))

#获取成员
print("----获取成员-----")
print(getattr(obj,"name"))
print(getattr(obj,"func")()) #getattr(obj,"func")实例的func的内存地址

#设置成员
print("----设置成员-----")
def show(num):
    return num+1
setattr(obj,"age",18)
setattr(obj,"show",3)
print(getattr(obj,"age"))
print(getattr(obj,"show"))

delattr(obj,"age")
delattr(obj,'show')
print("----是否有成员-----")
print(hasattr(obj,"age"))
print(hasattr(obj,"show"))

"""
----是否有成员-----
True
True
----获取成员-----
s
func
----设置成员-----
18
3
----是否有成员-----
False
False
"""

2)其他方法访问类的成员

class Foo(object):

    def __init__(self):
        self.name = 'alex'

    def func(self):
        return 'func'

# 不允许使用 obj.name
obj = Foo()

print obj.__dict__['name']

 

posted on 2017-06-04 21:06  shisanjun  阅读(263)  评论(0编辑  收藏  举报

导航