天天看點

補8.python之面相對象part.7(類相關函數的補充)

一,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,如需轉載請自行聯系原作者

繼續閱讀