面向对象内置方法

1.isinstance(obj,cls)和issubclass(sub,super)

判断obj是否是cls类的对象
例:
li=[1,[2,[3,[4]]]]
def run_list(li):
    for i in li:
        if isinstance(i,list):
            run_list(i)
        else:
            print(i)
run_list(li)
判断sub是否是super的派生类

2. 反射

  • 定义:
通过字符串的形式操作对象的相关属性
  • 相关方法
(1)hasattr
print(hasattr(peo1,'name')) #判断name是否在peo1.name中是可以访问的属性
(2)getarrt
print(getattr(peo1,'xx','None'))#在peo1中没有xx这个属性,有的话返回对应的值;没有这个属性,返回None,不会报错
(3)strattr
setattr(peo1,'age',19)    #增加属性
# print(peo1 .__dict__ )
(4)delattr(peo1,'name')  #删除
  • 内置方法
__str__ 在打印对象时触发
__del__析构方法
__getattr__ 对象在调用属性和方法时,找不到,就会触发;
__setattr__ 对象再给属性赋值时,就会触发

class A():
    bb='123'
    def __getattr__(self, item):
        print(item)  #byuu
        return 'aa'

    def __setattr__(self,  key,value):
         print(key,value) # 新的属性名和值 bb 199
a = A()
print(a.byuu)  #调用的属性不存在就触发__getattr__
# a.bb = 199  # 属性赋值时触发__setattr__
posted @ 2019-07-28 08:35  朝朝哥  阅读(125)  评论(0编辑  收藏  举报