1. issubclass(class,classinfo):如果第一个参数是第二个参数的子类,则返回True
但是是非严格的检查,因为一个类会被认为是自身的子类
classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,返回True
如果第二个不是类或者类对象组成的元组,抛出TypeError异常
class A:
pass
class B(A):
pass
class C:
pass
print(issubclass(B,A))
print(issubclass(B,B))
print(issubclass(B,object)) #object是所有类的子类
print(issubclass(B,C))
(object是所有类的子类)
2. isinstance(object,classinfo):检查一个实例对象是否属于一个类,是的话,返回True
第一个参数是实例对象,第二个是一个类
classinfo可以是类对象组成的元组
如果第一个参数不是对象,则永远返回False
如果第二个不是类或者类对象组成的元组,抛出TypeError异常
b1=B()
print(isinstance(b1,B))
print(isinstance(b1,A))
print(isinstance(b1,C))
print(isinstance(b1,(A,B,C)))
3.1 hasattr(object,name)
测试一个object对象是否有指定的属性name (name需要用字符串括起来)
class C:
def __init__(self,x=0):
self.x=x
c1=C()
print(hasattr(c1,'x'))
3.2 getattr(object,name[,default])
返回对象指定属性的值,如果有default,则会返回default,否则抛出异常
print(getattr(c1,'x'))
print(getattr(c1,'x','您所访问的属性不存在...'))
3.3 setattr(object,name,value)
设置对应对象里相应属性的值,如果属性不存在,则新建属性并赋值
setattr(c1,'y',5)
print(getattr(c1,'y'))
3.4 delattr(object,name)
删除对象里指定的属性,如果属性不存在则抛出异常
delattr(c1,'y')
# delattr(c1,'y') #属性不存在则抛出异常
3.4 property(fget=None,fset=None,fdel=None,doc=None)
通过属性来设置属性
第一个属性是获取属性的方法,第二个是设置属性的方法,第三个是删除属性的方法
class C:
def __init__(self, size=10):
self.size=size
def getSize(self):
return self.size
def setSize(self,value):
self.size=value
def delSize(self):
del self.size
x = property(getSize,setSize,delSize)
c1 = C()
print(c1.x)
c1.x=18
print(c1.size)
del c1.x