一,isinstance(obj.cls) & issubclass(sub,super)
isinstance(obj.cls):用于檢查一個對象是否屬于某個類。(某個對象是否由某個類産生)
l1 = list()
print isinstance(l1,list)
輸出:
True
2.issubclass(sub,super):用于判斷一個類是否是另一個類的子類。
#sub指的是子類,super指的是父類。
class c1(object):
pass
class c2(c1):
pass
print issubclass(c2,c1)
輸出:
True
二 , __getattribute__ (内置方法)
這個内置方法,從名字上來看和__getattr__特别的類似,但是觸發這個内置方法的條件和__getattr__完全不同!
在一個對象中,當要查找的屬性或者方法找不到的時候,就會觸發__getattr__。
__getattrbute__則是無論該方法或者屬性是否能被找到,都會觸發這個方法!這個方法一但執行,如果沒有在内部觸發一個AttributeError異常,那麼__getattr__方法将永遠不會被觸發。
下面是例子:
class class1(object):
def __init__(self,x):
self.x = x
def __getattr__(self, item):
print "call __getattr__"
obj1 = class1(123)
print obj1.x
call test
#接着在調用一個不存在的屬性
obj1.asadsdsadasfasf
call __getattr__ #__getattr__方法成功被執行。
def __getattribute__(self, item):
print "call __getattribute__ "
raise AttributeError("^ - ^") #抛出一個AttributeError
obj1.x
obj1.asasasasasas
輸出執行結果:
call __getattribute__
call __getattr__
從上面的結果來看, __getattribute__當抛出了一個AttributeError異常的時候,__getattr__才會被觸發!!
本文轉自蘇浩智 51CTO部落格,原文連結:http://blog.51cto.com/suhaozhi/1917990,如需轉載請自行聯系原作者