zoukankan      html  css  js  c++  java
  • 反射

    getattr,hasattr:  执行,判断

    ####  反射
    # 可以简化代码,操作更加简洁
    # 用字符串数据类型的变量名来访问这个变量的值
    
    
    # # 类 ,静态属性,类方法,静态方法
    # 命名空间.xxx 都可以getattr(命名空间,"xxx")
    # class Student:
    #     def __init__(self):pass
    #     def check_course(self):
    #         print("check_course")
    #     def choose_course(self):
    #         print("choose_course")
    #
    #     def choosed_course(self):
    #         print("查看已经选择的课程")
    # # 如果创建一个对象,对对象操作多次,会让代码很冗余
    
    class Student:
        name = "stu"
        @classmethod
        def check_course(cls):
            print("查看课程")
        @staticmethod
        def login():
            print("登录")
    
    # s1 = Student()
    # print(Student.name)
    # 反射查看静态属性
    # print(getattr(Student,"name"))
    # print(getattr(s1,"name")) # stu
    
    # 反射调用方法:
    # getattr(s1,"login")()
    # getattr(s1,"check_course")()
    # getattr(Student,"check_course")()
    # # 登录
    # # 查看课程
    # # 查看课程
    
    # num = input(">>>")
    # getattr(Student,num)()
    
    # num = input(">>>")
    # print(hasattr(Student,num))  # True  判断类和对象中是否有该函数,有则返回True
    # num = input(">>>")
    # print(hasattr(s1,num))
    # num = input(">>>")
    # if hasattr(s1,num):
    #     getattr(s1,num)()
    # else:
    #     print("报错")
    
    # # 对象
    # class A:
    #     def __init__(self,name):
    #         self.name = name
    #
    #     def func(self):
    #         return "in func"
    #
    # a = A("aaa")
    # print(a.name)
    # print(getattr(a,"name"))
    # print(getattr(a,"func")())
    
    # # 模块
    # import os
    # # os.rename("__init__.py","init")
    # getattr(os,"rename")("init","__init__.py")
    # # getattr(os,"rename")  相当于 os.rename  任何一个函数不加()都相当于内存地址
    # def ha():
    #     print("ha")
    # def he():
    #     print("he")
    # import sys
    # my_file = sys.modules["__main__"]
    # getattr(my_file,"he")()
    # getattr(my_file,"ha")()
    
    # 反射模块中的内容
    # # def ha():
    # #     print("ha")
    # # def he():
    # #     print("he")
    # # import sys
    # # my_file = sys.modules["__main__"]
    # # getattr(my_file,"he")()
    # #getattr(my_file,"ha")()
    
    
    # 反射
    # hasattr, getattr
    # 类名.名字
         # getattr(类名,"名字")
    # 模块名.名字
        # import 模块
        # getattr(模块,"名字")
    # 自己文件.名字
        # import sys
        # getattr(sys.modules["__main__"],"名字")

    delattr,setattr  删除,修改

    class A:
        def __init__(self,name):
            self.name = name
    
    a = A("dudu")
    print(a.name)
    # a.name = "ssss"
    # # print(a.name)
    
    setattr(a,"name","abcd")   # o,name,value   字符串形式,修改内容,很少使用
    print(a.name)
    # del a.name
    # print(a.__dict__)
    
    delattr(a,"name")  # o,name:str
    print(a.__dict__)   删除对象属性
  • 相关阅读:
    状压dp(基础)
    JVM调优实战
    MySql5.6性能优化
    淘淘商城_day09_课堂笔记
    【剑指offer】找出数组中任意一个重复的数字,C++实现
    【剑指offer】字符串转换为数字,C++实现
    【剑指offer】圆圈中最后剩下的数字(约瑟夫问题),C++实现
    【剑指offer】扑克牌的顺子,C++实现
    【剑指offer】n个骰子的点数,C++实现
    android webview 漏洞背后的节操
  • 原文地址:https://www.cnblogs.com/yfjly/p/10598597.html
Copyright © 2011-2022 走看看