0、如何判断一个类是否为另外一个类的子类

--使用issubclass(class,classinfo)函数,如果第一个函数(class)是第二个参数(classinfo)的一个子类,则返回Ture,否则返回False

* 一个类被认为是其自身的子类

* classinfo可以是类对象组成的元组,只要class与其中一个候选类的子类,则返回True

* 在其他情况下,会抛出TypeError异常

>>> class A:
pass >>> class B(A):
pass >>> issubclass(A,B)
False
>>> issubclass(B,A)
True
>>> -----B继承了A,所以issubclass(class,classinfo)
所以 issubclass(B,A)返回的是True
>>> issubclass(B,B)
True
>>> issubclass(B,object)
True
>>> * 一个类是自身的子类
* object是所有类的鸡肋

1、如何判断对象a是否为类A的实例对象?

--使用isinstance(object,classinfo)函数,如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回True,否则返回False

* 如果第一个参数不是对象,则永远返回False

* 如果第二个参数不是类或者类对象组成的元组,会抛出一个TypeError的异常

* 如果object是classinfo的子类的一个实例,也符合条件

* classinfo可以是类对象组成的元组,只要object是元组内任何一个类的实例化对象,返回True

>>> class A:
pass >>> class B(A):
pass >>> b1 = B()
>>> isinstance(b1,B)
True
>>> isinstance(b1,A)
True
>>> class C:
    pass >>> isinstance(b1,C)
False
>>> isinstance(b1,(A,B,C))
True
>>> ---b1是B的实例化对象,由于B类继承于A类,所以b1也是A类的实例化对象,同样都会返回true
---b1不是C的实例化对象,因为C类和A,B类没有任何的关系
---b1是(A,B,C)类元组的实例化对象,原因是class只要是元组中任何一个类的实例化对象,返回的就是Tru

2、如何避免访问对象不存在的属性(不产生异常)?

有两种方法:

*、先使用hasattr(object,name)函数判断属性是否存在,如果存在在访问(第一个参数(object)是对象,第二个参数(name)是属性名的字符串形式)

*、直接使用getattr(object,name[,default])函数并设置default参数(返回对象指定的属性值,如果指定的属性不存在,返回default(可选参数)的值)

>>> class D:
def __init__(self,x=0):
self.x = x >>> d1 = D()
>>> hasattr(d1,x)
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
hasattr(d1,x)
NameError: name 'x' is not defined
>>> hasattr(d1,'x')
True
>>> ---属性名称必须是字符型:'x'
>>> getattr(d1,'x')
0
>>> getattr(d1,'y')
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
getattr(d1,'y')
AttributeError: 'D' object has no attribute 'y'
>>> getattr(d1,'y',"当前属性不存在...")
'当前属性不存在...'
>>> --getattr()是返回属性的值,如果不存在则会抛出Error,当然可以设置一个默认的值,如:
"当前属性不存在..."

3、setattr(object,name,value)函数 :新建属性并赋值

>>> class D:
def __init__(self,x=0):
self.x = x >>> d1 = D()
>>> getattr(d1,'y',"当前属性不存在...")
'当前属性不存在...'
>>> setattr(d1,'y','')
>>> getattr(d1,'y')
'' --没有y属性, 设置了一个y属性并赋值1,再次获取y属性的值得到的是1

4、delattr(object,name)函数:删除对象中指定的属性,若没有此对象则抛出一个Error

>>> delattr(d1,'y')
>>> getattr(d1,'y')
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
getattr(d1,'y')
AttributeError: 'D' object has no attribute 'y'
>>> delattr(d1,'z')
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
delattr(d1,'z')
AttributeError: z --删除了y属性,再次获取y属性时则返回了: 'D' object has no attribute 'y'
--删除一个不存在属性,抛出一个Error错误:AttributeError: z

5、property((fget=None,fset=None,fdel=None,doc=None))函数的作用是什么?

--property函数允许变成人员轻松,有效地管理属性访问

class C:

    def __init__(self,size=10):
self.size = size def getXsize(self):
return self.size def setXsize(self,value):
self.size = value def delXsize(self):
del self.size x = property(getXsize,setXsize,delXsize) >>> c = C()
>>> c.x
>>> Out[4]: 10
>>> c.x = 12
>>> c.x
>>> Out[6]: 12

一、python的函数修饰符(装饰器)的使用

1、

【python40--类和对象:一些相关的BIF】的更多相关文章

  1. php有关类和对象的相关知识1

    有关类和对象的相关知识 类的自动加载 类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类. 什么叫做“需要一个类”?通常是这样的情 ...

  2. php有关类和对象的相关知识2

    与类有关的魔术常量: __CLASS__,:获取其所在的类的类名. __METHOD__:获取其所在的方法的方法名. class A{ function f1(){ echo __CLASS__: / ...

  3. python类与对象的内置函数大全(BIF)

    关于类与对象的一些常用BIF(内置函数) 1.issubclass(class,classinfo) 含义:如果class是classinfo的子类,则返回True,否则返回false,用来判断子类关 ...

  4. 学习笔记——Java类和对象

    今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...

  5. 类和对象:一些相关的BIF - 零基础入门学习Python040

    类和对象:一些相关的BIF 让编程改变世界 Change the world by program 一些类和对象相关的 BIF 今天我们来谈谈跟类和对象相关的一些BIF(内置函数): issubcla ...

  6. Python学习笔记008_类_对象_继承_组合_类相关的BIF

    # 对象 = 属性 + 方法>>> # Python中的类名约定以大写字母开始>>> # tt = Turtle() 这就是创建类实例的方法,其它语言用new ,它 ...

  7. 课时40:类与对象:一些相关的BIF

    目录: 一.一些相关的BIF 二..课时40课后习题及答案 ********************** 一.一些相关的BIF ********************** 1.issubclass( ...

  8. python语法学习第十天--类与对象相关的BIF、魔法方法

    一些相关的BIF: issubclass(class,classInfo)#判断是否为子类,classInfo可以为多个类的元组,其中一个是,返回true,一个类也被认为是自己的子类,object是所 ...

  9. Java类和对象详解,以及相关知识点

    了解类和对象前,简单提及面向对象程序设计.面向对象程序设计就是通过对象来进行程序设计,对象表示一个可以明确标识的实体.例如:一个人.一本书.一个学校或一台电脑等等.每个对象都有自己独特的标识.状态和行 ...

  10. Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】

    类和对象 (简单的了解一下这个概念,初步有个印象,这个概念很重要,后面会着重讲) 类:具有相同属性和方法的对象的集合: 对象:万物皆对象: 概念很抽象(每当我看不到概念的时候,我就会通过举例来理解) ...

随机推荐

  1. 线程间操作无效: 从不是创建控件“button1”的线程访问它。

    .net2后是不能跨线程访问控件的.,窗体上的控件是当前线程创建的,当用户异步执行一个方法:在该方法中给窗体上的控件赋值,记住:当执行一个异步委托的时候,其实 就是开了一个线程去执行那个方法,这样就会 ...

  2. jQuery-使用hover(fn,fn)函数监听mouseover和mouseout两个事件

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. Unity shader学习之屏幕后期处理效果之均值模糊

    均值模糊,也使用卷积来实现,之不过卷积中每个值均相等,且相加等于1. 代码如下, 子类: using UnityEngine; public class MeanBlurRenderer : Post ...

  4. [14]Windows内核情景分析 --- 文件系统

    文件系统 一台机器上可以安装很多物理介质来存放资料(如磁盘.光盘.软盘.U盘等).各种物理介质千差万别,都配备有各自的驱动程序,为了统一地访问这些物理介质,windows设计了文件系统机制.应用程序要 ...

  5. 阿里云ECS服务器 常见问题(1)

    无法在外网访问服务器的公网ip 解决方法: 在阿里云 云服务器ECS-安全组规则 添加端口 可更根据阿里的教程来 配置完成后即可访问!

  6. lua学习之循环求一个数的阶乘

    --第3题 利用循环求n的阶乘 --参数检查是否是自然数 function IsNaturalNumber(n) ~= )then return false else return true end ...

  7. [转]LoadRunner 各个指标分析

    转载:https://www.cnblogs.com/dvbbs2012/p/4073635.html 我们要监视CPU,内存.硬盘的资源情况.得到以下的参数提供分析的依据.%processor ti ...

  8. timestamp与timedelta,管理信息系统概念与基础

    1.将字符串‘2017年10月9日星期一9时10分0秒 UTC+8:00’转换为timestamp. 2.100天前是几号?   今年还有多少天? #timestamp与timedelta from ...

  9. 【2017-04-17】类库、通用变量、is和as、委托

    类库dll文件,里边有很多被编译后的C#代码,不可阅读,不可修改,只能调用 1.类库创建 新建项目为类库,类库文件编写完成后,选择生成—生成解决方案,在debug文件夹下找到dll文件 2.类库引用 ...

  10. MySql 存储过程 退出

    mysql不支持quit, exit或return的方式退出编写存储过程时,为了业务规则需要,我们可能需要提前退出存储过程那么,我们可以利用leave label方式模拟实现quit退出的效果应用示例 ...