Python3 类和对象:与类和对象相关的BIF
1、判断一个类为另一个类的子类
issubclass(class,classinfo)判断第一个参数是否为第二参数的子类
注意:1、这是不严格判断,因为一个类被认为是自身的子类
2、classinfo 可以是类对象组成的元组,只要class是其中任何一个候选的子类则返回Ture
3、在其他情况下抛出TypeError的错误
class A: def __init__(self): print('我是A类') class B(A): def __init__(self): print('我是B类继承A') class C(B): def __init__(self): print('我是C类继承B') >>> issubclass(C,A) True >>> issubclass(C,B) True >>> issubclass(A,A) True >>> issubclass(A,object)#所有类的父类都是object True >>> issubclass(A,C) False >>> issubclass(C,(A,B)) True >>>
2、判断一个对象是否属于该类
isinstance(object,classinfo)
注意:1、如果第一个参数不是对象则永远返回False
2、如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError的异常
class A: def __init__(self): print('我是A类') class B(A): def __init__(self): print('我是B类继承A') class C: def __init__(self): print('我是C类')
>>> a=A() 我是A类 >>> isinstance(a,A) True >>> isinstance(a,(C,A)) True >>> isinstance(B,(C,A)) False >>> isinstance(B,a) Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> isinstance(B,a) TypeError: isinstance() arg 2 must be a type or tuple of types
3、判断对象是否存在某种属性
hasattr(object,name)
注意:name要用单引号‘’括起来
class A: size=10 def __init__(self): print('我是A类') >>> hasattr(A,'size') True
4、获取对象的属性
getattr(object,name,default)
注意:当对象无该属性时如果default没赋值则会报错,如果赋值则返回default的值
class A: size=10 def __init__(self): print('我是A类') >>> getattr(A,'lenth','不存在该属性') '不存在该属性'
5、新建对象属性和删除属性的方法
新建
1、直接对象.属性 新建属性
2.setattr(object,name,value)#name加单引号
删除
delattr(类对象,name)
对类对象的属性的删除会影响到由该类所产生的实例对象,而不能用delattr(实例对象,name)来删除属性
class A: size=10 def __init__(self): print('我是A类') >>> a=A() 我是A类 >>> a.size 10 >>> a.y=1 >>> a.y 1 >>> a.size 10 >>> A.y Traceback (most recent call last): File "<pyshell#82>", line 1, in <module> A.y AttributeError: type object 'A' has no attribute 'y' >>> A.U=0 >>> a.U 0 >>> delattr(A,'U') >>> a.U Traceback (most recent call last): File "<pyshell#88>", line 1, in <module> a.U AttributeError: 'A' object has no attribute 'U'
6、property
引用小甲鱼:http://bbs.fishc.com/thread-51106-1-1.html
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.x 10 >>> c.x = 12 >>> c.x 12 #使用函数修饰符 class C: def __init__(self, size=10): self.size = size @property def x(self): return self.size @x.setter def x(self, value): self.size = value @x.deleter def x(self): del self.size
7、函数修饰符
http://bbs.fishc.com/thread-51109-1-1.html