• 反射


    一.类型判断

    1.isinstance

      isinstance(o,t)     判断o(object)是不是t(type)类型的(向上判断)

    2.type

      type(o)     返回o 是什么数据类型

    3.issubclass

      issubclass(a,b)     判断a是不是b类型的子类

    class Animal:
        def eat(self):
            print("吃")
    
    class Cat(Animal):
        def play(self):
            print("玩")
    
    a = Animal()
    c = Cat()
    
    print(isinstance(c,Cat))# 判断c 是不是xxx类型
    print(isinstance(c, Animal))   # 追溯到基类  父类
    
    print(isinstance(a,Cat))    # 只能湘父类方向找  不能反向
    
    print(type(c))     # 返回对象的数据类型
    
    print(issubclass(Cat,Animal)) # 判断xxx是不是xxxx的一个子类

    二.区分方法和函数

    1.直接打印函数名

    2.导入模块区分判断

    from types import FunctionType ,MethodType
    
    class Person:
        def chi(self):
            print("吃")
    
        @classmethod
        def he(cls):
            print("我是类方法")
    
        @staticmethod
        def wan():
            print("我是静态方法")
    
    p = Person()
    print(isinstance(p.chi,FunctionType))
    print(isinstance(p.he,FunctionType))
    print(isinstance(p.wan,FunctionType))
    
    print(isinstance(Person.chi,MethodType))
    print(isinstance(Person.he,MethodType))
    print(isinstance(Person.wan,MethodType))
    

    3.总结

      实例方法:

          如果使用    对象.实例方法        方法

          如果使用     类.实例方法   函数

      类方法:

          都是方法

      静态方法:

          都是函数

    三.反射

    1.从模块中拿东西去测试是否包含

    import master   # 报错不用管
    #
    print("""
         1. chi:  大牛特别能吃
         2. he: 大牛特别能喝
         3. shui: 大牛特别能睡
         4. play: 大牛特别能玩儿
         5. sa: 大牛很喜欢撒谎
     """)
     while 1:
         content = input("请输入你要执行的函数:")
         if content == "1":
            master.chi()
         elif content == "2":
            master.he()
         elif content =="3":
             master.shui()
         elif content == "4":
             master.play_1()
         elif content == "5":
             master.sa()
    
    

    2.反射,从测试中测是否包含

     while 1:
         content = input("请输入你要测试的功能:") # 用户输入的功能是一个字符串
    
         # 判断 xxx对象中是否包含了xxxxx
         if hasattr(master, content):
            xx = getattr(master, content)
             xx()
             print("有这个功能")
         else:
            print('没有这个功能')
    

    3.发射函数

      1.getattr(a,b)      从a对象中获取到b属性值

      2.hasattr(a,b)      判断a对象中是否有b属性值

      3.delattr(a,b)  从a对象中删除b属性和对应的属性值

      4.setattr(a,b,c)  设置a对象中的b属性为c值

  • 相关阅读:
    OpenSSL 安装 (Linux系统)
    JVM 指令集
    Github清除历史提交,保留最新提交
    php7+apache2.4 安装(window)
    mysql 函数模拟序列
    SpringBoot配置成Liunx服务
    Liunx下NFS服务器的搭建与配置
    Laravel 出现"RuntimeException inEncrypter.php line 43: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths."问题的解决办法
    win7安装laravel
    win7安装composer
  • 原文地址:https://www.cnblogs.com/q767498226/p/10153027.html
Copyright © 2020-2023  润新知