zoukankan      html  css  js  c++  java
  • 面向对象——反射及动态导入(三十二)

    反射:主要指程序可以访问,检测和修改它本身状态或行为的一种能力(自省)

    四个可以实现自省的函数

    一下方法适用于类和对象

    hasattr(object, name)
    判断object中有没有一个name字符串对应的方法和属性

    getattr(object, name, default=None)
    setattr(x, y, v)
    delattr(x, y)

    class People:
        __star = "earth"
        def __init__(self,name,id,sex):
            self.Name = name
            self.Id = id
            self.Sex = sex
    
        def get_star(self):
            print("%s" %(self.__star))
    
    p1 = People("zhangsan",123456,"male")
    p1.get_star()
    
    print(hasattr(p1,"Name")) # True
    print(hasattr(p1,"get_star")) # True
    
    print(getattr(p1,"Id")) # 123456
    print(getattr(p1,"abcd", "没有这个参数")) # 没有这个参数
    print(getattr(p1,"get_star")) #
    '''
    <bound method People.get_star of <__main__.People object at 0x000001E3D1448940>>
    '''
    fun = getattr(p1,"get_star")
    fun()
    
    print(p1.__dict__) # {'Name': 'zhangsan', 'Id': 123456, 'Sex': 'male'}
    setattr(p1,"Height",180)
    setattr(p1,"func",lambda x:x+1)
    print(p1.__dict__) # {'Height': 180, 'Name': 'zhangsan', 'func': <function <lambda> at 0x000002603DB67B70>,
                        # 'Sex': 'male', 'Id': 123456}
    print(p1.func(2))
    
    delattr(p1,"Sex")
    print(p1.__dict__) # {'Height': 180, 'Id': 123456, 'Name': 'zhangsan'}
    
    if hasattr(p1,"Sex"):
        print("%s" %p1.Sex)
    else:
        print("do something...")

    动态导入

    module_t = __import__("m1.test1") # 传入字符串
    print(module_t)
    module_t.test1.test2()
    '''
    <module 'm1' from 'E:\06_python\python_demo\test3\OO\m1\__init__.py'>
    test2...
    '''
    # m1/test1
    def test1():
        print("test1...")
    
    def test2():
        print("test2...")

    注意

    # m1/test1
    def test1():
        print("test1...")
    
    def _test2(): # _ 声明为私有
        print("test2...")
    from m1.test1 import * # 导入所有
    
    test1._test2() # 报错
     
    module_t = __import__("m1.test1") # 传入字符串
    print(module_t) # <module 'm1' from 'E:\06_python\python_demo\test3\OO\m1\__init__.py'>
    module_t.test1.test1()  # test1...
    
    import importlib
    m = importlib.import_module("m1.test1")
    print(m) # <module 'm1.test1' from 'E:\06_python\python_demo\test3\OO\m1\test1.py'>
    m.test1() # test1...
     
  • 相关阅读:
    Mybatis连接配置文件详解
    MyBatis映射配置文件详解
    AGC 016 C
    CodeForces
    UVA
    某5道CF水题
    DZY Loves Chinese / DZY Loves Chinese II
    [SHOI2016] 黑暗前的幻想乡
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10461588.html
Copyright © 2011-2022 走看看