isinstance,issubclass和__getattrribute__

 1 class Foo:
 2     pass
 3 class Boo(Foo):
 4     pass
 5 
 6 f1 = Foo()
 7 f2 = Boo()
 8 # isinstance(obj,cls)检查是否obj是否是类 cls 的对象       isinstance()判断实例化的对象是否属于后面的类
 9 print(isinstance(f1,Foo))           #True
10 print(isinstance(f2,Foo))           #True
11 # issubclass(sub, super)检查sub类是否是 super 类的派生类(子类)
12 print(issubclass(Boo,Foo))
13 
14 # getattribute
15 class Foo:
16     def __init__(self,x):
17         self.x = x
18 
19     def __getattr__(self, item):
20         print('这里是__getattr__')
21     def __getattribute__(self, item):
22         print('这里是__getattrribute__')
23 
24 f1 = Foo('x')
25 f1.x            #这里是__getattrribute__
26 f1.name         #这里是__getattrribute__
27 
28 class Foo:
29     def __init__(self,x):
30         self.x = x
31 
32     def __getattr__(self, item):
33         print('这里是__getattr__')
34     def __getattribute__(self, item):
35         print('这里是__getattrribute__')
36         raise AttributeError('抛出异常')        #这样子抛异常会执行上一行的操作
37 
38 
39 f1 = Foo('x')
40 f1.x
41 ## 这里是__getattrribute__
42 ## 这里是__getattr__
43 f1.name
44 ## 这里是__getattrribute__
45 ## 这里是__getattr__

猜你喜欢

转载自www.cnblogs.com/humanskin/p/9147669.html