zoukankan      html  css  js  c++  java
  • python 反射

    反射

    说反射之前先介绍一下__import__方法,这个和import导入模块的另一种方式

    import  commons
    __import__('commons') 

    如果是多层导入:

    from list.text import commons 
    __import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录

    反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员

    下面逐一介绍

     1 #coding:UTF8
     2 
     3 
     4 class Foo(object):
     5  
     6     def __init__(self):
     7         self.name = 'abc'
     8  
     9     def func(self):
    10         return 'ok'
    11  
    12 obj = Foo()
    13 #获取成员
    14 ret = getattr(obj, 'func')#获取的是个对象
    15 r = ret()
    16 print(r)
    17 #检查成员
    18 ret = hasattr(obj,'func')#因为有func方法所以返回True
    19 print(ret)
    20 #设置成员
    21 print(obj.name) #设置之前为:abc
    22 ret = setattr(obj,'name',19)
    23 print(obj.name) #设置之后为:19
    24 #删除成员
    25 print(obj.name) #abc
    26 delattr(obj,'name')
    27 print(obj.name) #报错
    View Code
     1 运行结果:
     2 ok
     3 True
     4 abc
     5 19
     6 19
     7 Traceback (most recent call last):
     8   File "E:demo.py", line 27, in <module>
     9     print(obj.name) #报错
    10 AttributeError: 'Foo' object has no attribute 'name'
    View Code

    对于反射小节:

    1.根据字符串的形式导入模块。
    2.根据字符串的形式去对象(某个模块)中操作其成员 
  • 相关阅读:
    ubuntu下配置Apache
    ubuntu 下配置Web服务器
    ubuntu 笔记一
    域名解析
    C# Enum,Int,String的互相转换
    C# 得到本机局域网IP地址
    C# 连接 SQLServer 及操作
    C# OpenFileDialog 使用
    如何解决 IntelliJ Idea 编译 Java 项目时,找不到包或找不到符号的问题?
    阿里巴巴 MySQL 数据库之 SQL 语句规约 (三)
  • 原文地址:https://www.cnblogs.com/qianyuliang/p/6411005.html
Copyright © 2011-2022 走看看