• 【python之路】面向对象进阶


    一、isinstance(obj,cls)和issubclass(sub,super)

    isinstance(obj,cls)检查obj是否是cls的对象

    1 class Foo(object):
    2     pass
    3  
    4 obj = Foo()
    5  
    6 isinstance(obj, Foo)

    issubclass(sub, super)检查sub类是否是 super 类的派生类

    复制代码
    1 class Foo(object):
    2     pass
    3  
    4 class Bar(Foo):
    5     pass
    6  
    7 issubclass(Bar, Foo)
    复制代码

    二、反射

      1.什么是反射

      主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。

      2.python面向对象中的反射:用过字符串的形式操作对象相关的属性。python中一切事物都是对象(都可以使用反射)

    class Teacher:
        school='oldboy'
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print('%s teach' %self.name)
    
    print(hasattr(Teacher,'school'))    #检测是否含有属性
    
    func=getattr(Teacher,'teach'))    #获取属性
    func() print(getattr(Teacher,'school',None)) # Teacher.x=123 setattr(Teacher,'x',123) #用字符串的方式添加属性 print(Teacher.x) delattr(Teacher,'school') #用字符串的方式删除属性 print(Teacher.school)

      3.为什么用反射之反射的好处

      好处一:实现可插拔机制

      可以实现把主要的逻辑写好,然后后期再去实现接口的功能

      好处二:动态导入模块

    三、__setitem__,__getitem__,__delitem__

    class Foo:
        def __init__(self,name):
            self.name=name
    
        def __getitem__(self, item):
            print(self.__dict__[item])
    
        def __setitem__(self, key, value):
            self.__dict__[key]=value
        def __delitem__(self, key):
            print('del obj[key]时,我执行')
            self.__dict__.pop(key)
        def __delattr__(self, item):
            print('del obj.key时,我执行')
            self.__dict__.pop(item)
    
    f1=Foo('sb')
    f1['age']=18
    f1['age1']=19
    del f1.age1
    del f1['age']
    f1['name']='alex'
    print(f1.__dict__)
  • 相关阅读:
    mybatis-plus 插件
    mybatis-plus 逆向工程模板
    mybatis-plus 使用
    response.getWriter()
    String.length()和String.getBytes().length
    mybatis 中有趣的符号#与$
    html动画实现
    把我坑惨的一个update语句
    我们为什么不用 Select * 吗?
    Java 正则表达式
  • 原文地址:https://www.cnblogs.com/78pikaqiu/p/7133595.html
Copyright © 2020-2023  润新知