• python 反射


    """
    !/usr/bin/env python
    -*- coding: utf-8 -*-
    @Time    : 2021/1/22 20:11
    @Author  : xibo.zhu
    @Site    : 
    @File    : 反射.py
    @Software: PyCharm
    """
    
    """
    反射是一个很重要的概念,它可以把字符串映射到实例的变量或者实例的方法然后可以去执行调用、修改等操作。它有四个重要的方法:
    
    getattr 获取指定字符串名称的对象属性
    setattr 为对象设置一个对象
    hasattr 判断对象是否有对应的对象(字符串)
    delattr 删除指定属性
    attr是属性英文的前几个字母,属性指的是类中类变量、实例变量和方法。但是要注意不能是私有的,如果你的变量是以“_”开头,那将无法获取。
    """
    class TestObj(object):
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def displayName(self):
            print("displayName方法执行,打印姓名:", self.name)
    
    
    
    def AAA(self):
        print("I am AAA.")
    
    
    def main():
        to = TestObj("Tom", 23)
        # 查看 to 实例里面是否有 name 这个属性
        if hasattr(to, "name"):
            print("实例 to 中有 name 属性。")
            #获取对应属性
            print(getattr(to, "name"))
        else:
            print("实例 to 中没有 name 属性。")
    
        if hasattr(to, "displayName"):
            print("实例 to 中有 displayName 属性。")
            getattr(to, "displayName")()
        else:
            print("实例 to 中没有 displayName 属性。")
    
        if hasattr(to, "AAA"):
            print("实例 to 中有 AAA 属性。")
            getattr(to, "AAA")()
        else:
            print("实例 to 中没有 AAA 属性,将会设置。")
            setattr(to, "AAA", AAA)  # 参数:实例、方法名称、具体方法  相当于 to.AAA = AAA 第一个AAA是函数在实例中的名称, 第二个AAA是把哪个函数放进去,两者只是恰好这里名称一样
    
            # to.AAA(to)  # 这里一定要主动传递一个实例进去,因为它不会自动装配self
            getattr(to, "AAA")(to)
    
    if __name__ == '__main__':
        main()

  • 相关阅读:
    Mysql 安装
    网站搭建 so easy
    git 命令!!!!!!!!!!!
    git branch 管理常用命令
    Java开发环境的搭建以及使用eclipse从头一步步创建java项目
    git 放弃本地修改 强制更新
    java算法之猴子排序睡眠排序
    sql业务需求,查询每个分类下的前两n条数据
    mysql安装
    linux服务自启
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14318063.html
Copyright © 2020-2023  润新知