一、isinstance(obj,cls): 检查obj是否是类 cls 的对象
代码示例:
1 class Foo: 2 pass 3 4 obj = Foo() 5 6 print(isinstance(obj, Foo)) 7 8 结果为: 9 10 True
二、issubclass(sub, super): 检查sub类是否是 super 类的派生类
代码实例:
1 class Foo: 2 pass 3 4 class Bar(Foo): 5 pass 6 7 print(issubclass(Bar, Foo)) 8 9 结果为: 10 11 True
三、item系列
1.查询
1 class Foo: 2 def __getitem__(self, item): 3 print('getitem.....') 4 print(item) 5 6 def __setitem__(self, key, value): 7 print('setitem......') 8 print(key, value) 9 10 def __delitem__(self, key): 11 print('delitem.......') 12 print(key) 13 14 obj = Foo() 15 16 obj['name'] 17 18 结果为: 19 20 getitem..... 21 name
触发了第一个方法
1 class Foo: 2 def __init__(self, name): 3 self.name = name 4 5 def __getitem__(self, item): 6 # print('getitem.....') 7 # print(item) 8 return self.__dict__[item] 9 10 def __setitem__(self, key, value): 11 print('setitem......') 12 print(key, value) 13 14 def __delitem__(self, key): 15 print('delitem.......') 16 print(key) 17 18 19 obj = Foo('egon') 20 # print(obj.__dict__) 21 print(obj['name']) 22 23 结果为; 24 25 egon
如果
print(obj['namexxx']),不存在的话会报错
1 Traceback (most recent call last): 2 File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/25 内置方法.py", line 38, in <module> 3 print(obj['namexxx']) 4 File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/25 内置方法.py", line 25, in __getitem__ 5 return self.__dict__[item] 6 KeyError: 'namexxx'
这时候可以修改下代码:
1 return self.__dict__.get(item)
这样就不会报错了,不存在就返回None
2、设置
1 def __setitem__(self, key, value): 2 # print('setitem......') 3 # print(key, value) 4 self.__dict__[key] = value 5 6 obj = Foo('egon') 7 # print(obj.__dict__) 8 # print(obj['namexxx']) 9 obj['sex'] = 'male' 10 print(obj.__dict__) 11 print(obj.sex) 12 13 结果为: 14 15 {'name': 'egon', 'sex': 'male'} 16 male
可以看到,修改成功,触发了setitem方法
3、删除
1 def __delitem__(self, key): 2 print('delitem.......') 3 print(key) 4 5 6 del obj['name'] 7 8 结果为: 9 10 delitem....... 11 name
可以看到,触发了delitem方法,
def __delitem__(self, key): print('delitem.......') print(key) self.__dict__.pop(key) obj = Foo('egon') # print(obj.__dict__) # print(obj['namexxx']) # obj['sex'] = 'male' # print(obj.__dict__) # print(obj.sex) del obj['name'] print(obj.__dict__) 结果为: delitem....... name {}