zoukankan      html  css  js  c++  java
  • 面向对象进阶 反射

    面向对象进阶

    反射

    反射:通过字符串的形式操作对象相关的属性

    getattr() 使用字符串数据类型的变量名获取属性值

    hasattr() 使用字符串数据类型的变量名判断属性是否存在

    setattr()  使用字符串数据类型的变量名获修改属性值

    delattr() 使用字符串数据类型的变量名获删除属性值

    复制代码
    class Management:
        role = '管理员'
        def __init__(self,name,sex,phone,mail):
            self.name = name
            self.sex = sex
            self.phone = phone
            self.mail = mail
        def create_class(self):
            print('创建了一个班级')
        def create_teacher(self):
            print('新建了一条讲师信息')
        def create_student(self):
            print('新建了一条学生信息')
    
    manager = Management('小雨','女',1233211234567,'xiaoyu@qq.com')
    # func = input('func:')
    # f = getattr(manager,func)
    # f()
    f = getattr(manager,'phone')  # 使用字符串数据类型的变量名获取属性值
    print(f)
    f = getattr(manager,'phone1','没有这个属性')  # 可以添加找不到的时候的默认值,不然会报错
    print(f)
    cs = getattr(manager,'create_class')  # 使用字符串数据类型的方法名调用方法
    cs()
    print(hasattr(manager,'name'))  # True
    f = getattr(Management,'role')
    print(f)
    
    import logging
    if hasattr(manager,'sex'):
        sex = getattr(manager,'sex')
        print(sex)
    else:
        logging.warning('没有您输入的属性')
    
    # Management.Country = 'China'
    setattr(Management,'Country','China')
    print(Management.Country)  # China
    delattr(Management,'Country')
    
    setattr(manager,'job','teacher')
    print(manager.job)
    delattr(manager,'job')
    
    # 可以通过delattr删除一个类中的方法
    delattr(Management,'create_class')
    
    def create_course(self):
        print('创建了一个课程')
    setattr(manager,'create_course',create_course)
    manager.create_course(manager)
    复制代码

    对象的反射
    类的反射
    模块的反射
    本模块的反射:找到本模块sys.modules[__name__]

    aaa = 'bbb'
    import sys
    print(sys.modules['__main__'])
    print(getattr(sys.modules['__main__'],'aaa'))  # bbb
    print(sys.modules[__name__])
    print(getattr(sys.modules[__name__],'aaa'))
  • 相关阅读:
    字符串删减
    iOS-AFNetworking与ASIHTTPRequest的区别
    iOS-清理缓存
    iOS-addSubView时给UIView添加效果
    iOS-明杰解决字段冲突,及数组映射
    iOS-开发将文本复制到剪切板
    iOS-加载html字符串
    iOS-UILabel加线
    iOS-获取webView的高度
    iOS-plist文件的写读
  • 原文地址:https://www.cnblogs.com/QQ279366/p/7892209.html
Copyright © 2011-2022 走看看