首页 > 代码库 > 补8.python之面相对象part.7(类相关函数的补充)

补8.python之面相对象part.7(类相关函数的补充)

一,isinstance(obj.cls) & issubclass(sub,super) 

  1. 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__方法成功被执行。


class class1(object):

    def __init__(self,x):

        self.x = x

    def __getattr__(self, item):

        print "call __getattr__"

    def __getattribute__(self, item):

        print "call  __getattribute__ "

        raise AttributeError("^ - ^")  #抛出一个AttributeError

obj1 = class1(123)

obj1.x

obj1.asasasasasas


输出执行结果:

call  __getattribute__ 

call __getattr__

call  __getattribute__ 

call __getattr__


从上面的结果来看, __getattribute__当抛出了一个AttributeError异常的时候,__getattr__才会被触发!!



本文出自 “reBiRTH” 博客,请务必保留此出处http://suhaozhi.blog.51cto.com/7272298/1917990

补8.python之面相对象part.7(类相关函数的补充)