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']
  • 相关阅读:
    SpringBoot-14-MyBatis预热篇,MySQL小结
    SpringBoot-13-插曲之Node文件重命名+自动生成json对象
    八月十九风雨大作
    诉世书
    《仪式》
    珊瑚墓地
    新生
    《应龙》
    《枝·你是树的狂舞》
    golang中使用etcd
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/6941915.html
Copyright © 2011-2022 走看看