补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__才会被触发!!

时间: 2024-10-11 06:01:00

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

补8.python之面相对象part.6(补充授权与继承的概念)

一.什么是python中对类的"包装". (简单来说,包装就是通过类继承的特性为类增加或者修改类中原有的功能) 举个例子,python内部提供了很多标准的数据类型,以及很多的内置方法,在有一些场景下,我们需要基于标准数据类型去定制自己所需要的数据类型,新增或者改写一些类的方法,在做这种操作的时候,就需要用到类继承相关的知识.(python自带的标准类也可以通过"包装"这种方式来进行二次加工.) 例子1:给python的list列表类增加一个功能,这个功能可以查看列表

8.python之面相对象part.6(反射&__call__,__setattr__,__delattr__,__getattr__)

一.什么是反射? 反射,又被称为自省,主要是指程序本身可以访问,检测,和修改"自己",状态或行为的一种能力. 二.python是如何体现这种反射机制的? 通过字符串去操作对象相关的属性,python中,一切皆对象,所有的地方都可以用到反射. python内部提供了四个实现反射(自省)的函数,这四个函数可以适用于任何的类和对象(这是因为类本身也是一个对象!) 1.hasattr(object,str) 用来检测一个对象中是否有某个字符串对应的方法或者属性. 例如: l1 = [] pri

8.python之面相对象part.1(初识类与对象)

一.类和对象的概念. 什么是类 类就是把一类事物相同的特征和动作整合到一起就是类比如说"人"就是一个类. 什么是对象 对象就是基于类创建出来的一个具体存在的事物这个事物包含了将其创造出来的类的特征和动作. 类与对象有什么关系一切的对象都是由类产生的假如说造一支笔首先要有一个造笔的模版上帝制造人也是一样制造一个人也需要一个造人的模版这个模板就是人的"类"然后根据类的定义来产生一支支笔和一个个的人. 什么是实例化 由类产生对象的过程就是实例化类实例化的结果就是一个对象对

8.python之面相对象part.9(初识元类part.1)

初步认识元类 #本篇文章介绍的元类,以及type以python3以上版本为准. 一.关于元类的前言. 在python中,一切皆对象,当然,类也是一个对象. class c1: pass obj1 = c1() 从上面这段例子可以看到,obj1是c1这个类创建出来的一个对象,obj1是由c1去产生的,如果按照前面的理论来理解,类也是一个对象,那么c1是由谁创建出来的呢? #type函数可以查看类型,也可以用来查看对象的类,二者是一样的 print(type(obj1)) # 输出:<class '

python之面相对象程序设计

一 面向对象的程序设计的由来 面向对象设计的由来见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 面向对象的程序设计:路飞学院版 二 什么是面向对象的程序设计及为什么要有它 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将

递归函数、二分查找、面相对象初识、类空间,对象空间、组合、继承

一.递归函数 一般递归100多次,都没有解决的问题,放弃递归. 默认递归深度:998 修改默认递归次数 import sys sys.setrecursionlimit(100000) #设置十万次 count = 0 def func1(): global count count += 1 print(count) func1() func1() 用递归 解决一个年龄问题. alex 他比佩奇 大两岁.  4   age(3) + 2 佩奇 他比日天 大两岁.  3   age(2) + 2

python中将普通对象作为 字典类(dict) 使用

目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __getitem__()方法 class A: def __init__(self, cfg={}): <strong><span style="color:#ff0000;">self.cfg = cfg</span></strong> de

[转载]python中将普通对象作为 字典类(dict) 使用

目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __getitem__()方法 class A: def __init__(self, cfg={}): self.cfg = cfg def __setitem__(self, key, value): self.cfg[key] = value def __getitem__(self, key):

8.python之面相对象part.2(特殊属性,类方法,静态方法)

一.关于特殊属性(property). 接着上一篇文章继续说,如果想调用python中一个对象的属性,直接使用类或者对象名称在后面加.点然后写上属性名称就可以跳用这个类或者对象的属性了,比如说像下面这样. class person: def __init__(self,career): self.career = career ayumi = person(career="diva") print ayumi.career #ayumi是实例化出来的一个对象后面加.点,后面接属性名,就