【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__)
原文地址:https://www.cnblogs.com/78pikaqiu/p/7133595.html