zoukankan      html  css  js  c++  java
  • python面向对象(反射)(四)

    1. isinstance, type, issubclass

        isinstance: 判断你给对象是否是xx类型的. (向上判断

        type: 返回xxx对象的数据类型

        issubclass: 判断xxx类是否xxx的子类

    class Animal:
        def eat(self):
            print("刚睡醒吃点儿东西")
    
    class Cat(Animal):
        def play(self):
            print("猫喜欢玩儿")
    
    c = Cat()
    
    print(isinstance(c, Cat)) # True
    print(isinstance(c, Animal)) # True
    
    a = Animal()
    print(isinstance(a, Cat)) # 不能向下判断  False
    
    print(type(a)) # 返回 a的数据类型
    print(type(c)) # 精准的告诉你这个对象的数据类型
    
    # 判断.xx类是否是xxxx类的子类
    print(issubclass(Cat, Animal))  # True
    print(issubclass(Animal, Cat))  # False

    2. 如何区分方法和函数

        在类中:

            实例方法

                如果是类名.方法  函数

                如果是对象.方法  方法

            类方法: 都是方法

            静态方法: 都是函数

        from types import MethodType, FunctionType

        isinstance()

    from types import FunctionType, MethodType  #  引入方法和函数的模块
    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

    3. 反射

        一共就4个函数

        attr: attribute

        getattr()

            从xxx对象中获取到xxx属性值

        hasattr()

            判断xxx对象中是否有xxx属性值

        delattr()

            从xxx对象中删除xxx属性

        setattr()

            设置xxx对象中的xxx属性为xxxx值

     

    class Person:
        def __init__(self, name,wife):
            self.name = name
            self.wife = wife
    
    
    p = Person("宝宝", "林志玲")
    
    print(hasattr(p, "wife")) 
    print(getattr(p, "wife")) # p.wife
    
    setattr(p, "wife", "胡一菲") # p.wife = 胡一菲
    setattr(p, "money", 100000) # p.money = 100000
    
    print(p.wife)
    print(p.money)
    
    delattr(p, "wife") # 把对象中的xxx属性移除. 并不是p.wife = None
    print(p.wife)
  • 相关阅读:
    GridControl 绑定非绑定列
    AutoMapper
    ABP-TaskEver 路线图
    Angular--页面间切换及传值的四种方法
    知行合一,止于至善
    AutoFac 依赖注入--问题集
    【入门】依赖注入(DI)-开始
    利用JAVA生成二维码
    sqlserver如何关闭死锁进程.
    Hadoop/HBase 配置snappy压缩
  • 原文地址:https://www.cnblogs.com/fu-1111/p/10151759.html
Copyright © 2011-2022 走看看