Python----面向对象---内置方法--isinstance(obj,cls)、issubclass(sub, super)、item系列

一、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
{}
原文地址:https://www.cnblogs.com/xudachen/p/8627223.html