zoukankan      html  css  js  c++  java
  • 反射-isinstance()-issubclass()-dir-callable

    一.反射。

    二.isinstance()函数

    三.type()函数。

    四.issubclass()函数。

    一.反射

     反射一共就四个函数:

    getattr(object,name)
    从xxx对象中获取到xxx属性值
    hasattr(object,name)
    判断xxx对象中是否有xxx属性值
    delattr(object,name)
    从xxx对象中删除xxx属性
    setattr(object,name,value)
    设置xxx对象中的xxx属性为xxxx值
    
    attr的全称是 attribute 属性的意思
    # 对于模块而言可以使用getattr, hasattr, 同样对于我们的对象也可以执行类似的操作
    class Person:
        def __init__(self, name, laopo):
            self.name = name
            self.laopo = laopo
    p = Person("宝宝", "林志玲")
    print(hasattr(p, "laopo")) #
    print(getattr(p, "laopo")) # p.laopo
    setattr(p, "laopo", "胡一菲") # p.laopo = 胡一菲
    setattr(p, "money", 100000000000) # p.money = 100000000
    print(p.laopo)
    print(p.money)
    
    delattr(p, "laopo") # 把对象中的xxx属性移除.  != p.laopo = None
    print(p.laopo)

    二.isinstance()函数.

    isinstance: 判断你给对象是否是x类里的. (向上判断,不考虑继承关系)

    三.type()函数.

    返回xxx对象的数据类型(精确到上一层)

    四.issubclass()函数.

    只能向下判断.(考虑继承关系)

     

    五.其他零星补充:

    如何判断是方法还是函数:

    from types import FunctionType, MethodType # 方法和函数
    from collections import Iterable, Iterator # 迭代器
    
    class Person:
        def chi(self): # 实例方法
            print("我要吃鱼")
        @classmethod
        def he(cls):
            print("我是类方法")
        @staticmethod
        def pi():
            print("泥溪镇地皮")
    p
    = Person() print(isinstance(Person.chi, FunctionType)) # True print(isinstance(p.chi, MethodType)) # True print(isinstance(p.he, MethodType)) # True print(isinstance(Person.he, MethodType)) # True print(isinstance(p.pi, FunctionType)) # True print(isinstance(Person.pi, FunctionType)) # True
    callable(obj)检测该参数是否可调用.
    
    对象是否可被调用,看类中是否定义了__all__方法,有就可以,没有就不可以
    
    dir(obj)查看x对象中的所有内容(方法,函数,内置函数)

    函数和方法如何区分:(FunctionType,MethodType)

    from types import FunctionType, MethodType
    class Car(object):
        def __init__(self):
            pass
        def run(self):
            print("my car can run!")
        @staticmethod
        def fly(self):
            print("my car can fly!")
        @classmethod
        def jumk(cls):
            print("my car can jumk!")
    
    c = Car()
    print(isinstance(c.run,MethodType)) # True
    print(isinstance(Car.run,FunctionType)) #True

    类__反射(相关练习)

  • 相关阅读:
    购物英语词汇
    生活学习英语词汇
    银行英语词汇
    烹饪英语词汇
    旅游英语词汇
    饮食英语词汇
    书英语词汇
    王元编辑口语资料中国传统之节日
    DataSet在WCF中怎么办?
    Python生成Wav格式文件
  • 原文地址:https://www.cnblogs.com/lgw1171435560/p/10152197.html
Copyright © 2011-2022 走看看