• python 反射、动态导入


    1. 反射

    hasattr(obj,'name')            # 判断对象中是否含有字符串形式的方法名或属性名,返回True、False

    getattr(obj,'name',None)   # 返回对象中的方法或属性: obj.name,如果没有此方法或属性,返回None

    setattr(obj,'name',value)   # 设置对象中方法或属性的值: obj.name = value

    delattr(obj,'name')            # 删除对象中的方法或属性

    class A(object):
        age = 22
        def __init__(self,name):
            self.name = name
        def getname(self):
            print(self.name)
    
    a = A('wang')
    print(hasattr(a,'age')) # True 判断对象中是否有字符串形式的方法或属性名字。
    
    setattr(a,'sex','man')  # 给a对象设置一个属性:sex = 'man'
    print(a.sex)
    
    func = getattr(a,'getname',None) # 获取a对象的一个方法:getname;如果没有这个方法,则为None
    func()
    
    delattr(a,'name')  # 删除a对象的age属性
    try:
        print(a.name)
    except:
        print('name is not exists any more')

    类里的__getattr__、__setattr__方法

    class A(object):
        def __init__(self,name='Wang'):
            # 此处的赋值其实是触发了__setattr__
            self.name = name
    
        # 当对象调用一个不存在的属性,才会触发
        def __getattr__(self, item):
            self.con = item
    
        # 添加和修改属性会触发此方法
        def __setattr__(self, key, value):
            self.__dict__[key] = value
            # 不能用下面的方法,因为self.key本身就调用了__setattr__方法,然后无限递归报错
            # self.key = value
    
    a = A()
    
    # 新建一个属性并赋值,调用__setattr__方法
    a.hello = 'Hi'
    print(a.hello)
    
    # 调用一个不存在的属性,调用__getattr__方法
    a.world
    print(a.con)
    结果:
    Hi world Process finished with exit code 0

    2. 动态导入模块

    转自:https://blog.csdn.net/xie_0723/article/details/78004649

    # 转自: https://blog.csdn.net/xie_0723/article/details/78004649
    # a  # 文件夹
    # │a.py
    # │__init__.py
    # b  # 文件夹
    # │b.py
    # │__init__.py
    # ├─c  # 文件夹
    # │c.py
    # │__init__.py
    #
    # # c.py 中内容
    # args = {'a': 1}
    # class C:
    #     def c(self):
    #         pass
    
    # a.py导入c.py
    import importlib
    pa1 = importlib.import_module('b.c.c')  # 绝对导入
    pa2 = importlib.import_module('.c.c',package='b') # 相对导入
    pa1.args # 提取变量args
    pa1.C    # 提取class C
    pa1.C.c  # 提取class C的c方法
  • 相关阅读:
    for循环练习-----ATM取款
    面向对象基础项目----图书管理系统(数组)
    Java基础学习(二)-- 二维数组、String、StringBuffer以及类和对象之详解
    Java基础学习(一) -- Java环境搭建、数据类型、分支循环等控制结构、简单一维数组详解
    js 解决由于&#65279(bom文件格式)产生的空白行
    自适应网站设计对百度友好的关键:添加applicable-device标签(转)
    浏览器内核控制标签--meta
    HTML5的元素与结构标签
    <img>标签的补充
    HTML <head> 头部中的各类标签
  • 原文地址:https://www.cnblogs.com/wztshine/p/11872701.html
Copyright © 2020-2023  润新知