补8.python之面相对象part.7(类相关函数的补充)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了补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__方法成功被执行。
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(类相关函数的补充)的主要内容,如果未能解决你的问题,请参考以下文章
8.python之面相对象part.7(__setitem__,__getitem,__delitem__)
8.python之面相对象part.2(特殊属性,类方法,静态方法)