zoukankan      html  css  js  c++  java
  • 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']
  • 相关阅读:
    Something about the "BSTR" and "SysStringLen"
    关于 i = i ++ 的问题
    duilib写个三国杀?
    关于WM_GETTEXT的应用
    hoops暂时用过的一些方法
    Hoops随便记的
    C++ win32线程数上限
    windows系统时间(SYSTEMTIME)
    Form表单提交的那些事
    多行文字溢出...
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/6941915.html
Copyright © 2011-2022 走看看