①issubclass(class, classinfo) 若第一个参数是第二个参数的子类,则返回True
说明:1>这种检查是非严格性的检查,是一种宽松的检查,也就是说一个类被认为是其自身的子类;
2> classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True
②isinstance(object, classinfo) 检查一个实例对象是否属于一个类,是返回True
注意:1>如果第一个参数不是对象,则永远返回False
2>如果第二个参数不是类或者由类对象组成的元组,则会抛出一个TypeError的异常
以前我们都是通过.操作符来访问对象的属性,下面Python提供4种方法能让我们更加斯文的访问对象的属性:
attr = attribute: 属性
③hasattr(object, name) 测试一个对象object是否有指定的属性name,属性名要用表示字符串的双引号括起来。
>>> class C:
def __init__(self, x = 0):
self.x = x
>>> c1 = C()
>>> hasattr(c1, x)
Traceback (most recent call last):
File "<pyshell#69>", line 1, in <module>
hasattr(c1, x)
NameError: name 'x' is not defined
>>> hasattr(c1, 'x') #注意要用表示字符串的引号括起来
True
④getattr(object, name[, default]) 返回对象指定的属性值,如果指定的参数不存在,(如果default有设置)会将default的内容打印出来,(没设置)抛出一个AttributeError的异常
>>> getattr(c1, 'x')
0
>>> getattr(c1, 'y')
Traceback (most recent call last):
File "<pyshell#72>", line 1, in <module>
getattr(c1, 'y')
AttributeError: 'C' object has no attribute 'y'
>>> getattr(c1, 'y', '您所访问的参数不存在') #用户体验更好
'您所访问的参数不存在'
⑤setattr(object, name, value) 设置对象中指定属性的值,如果指定属性不存在,则会新建一个属性,并给他赋值。同样name的也要写成字符串的形式。
>>> setattr(c1, 'y', '我出世了!')
>>> getattr(c1, 'y', '您所访问的参数不存在')
'我出世了!'
⑥delattr(object, name)删除对象中指定的属性,如果指定的属性不存在,则抛出AttributeErro的异常
>>> delattr(c1, 'y')
>>> delattr(c1, 'y') #可以先用hasattr()检测是否存在,再删除
Traceback (most recent call last):
File "<pyshell#77>", line 1, in <module>
delattr(c1, 'y')
AttributeError: y
⑦property(fget=None, fset=None, fdel=None, doc=None) 通过属性来设置属性,返回值是一个属性.
该函数的作用是设置一个属性,这个属性的作用是设置定义好的属性。第一个参数必须是获取属性的方法,第二个参数必须是设置属性的方法,第三个参数是删除属性的方法
用途:当想修改下例中的setSize等的方法名时,只用在类里面最修改,而不用去改类外面的参数了。
>>> class C:
def __init__(self, size = 10):
self.size = size
def getSize(self): #具体怎么获取可以自己写,写完后再传给property()
return self.size
def setSize(self, value):
self.size = value
def delSize(self):
del self.size
x = property(getSize, setSize, delSize)
>>> c1 = C()
>>> c1.x #原来得通过getSize()获取size的值,现在可以直接访问x
10 #c1.x会执行第一个参数里的内容
>>> c1.x = 18 #原来得通过setSize()修改size的值,现在可以这样修改
>>> c1.getSize() #c1.x= 会执行第二个参数里面的内容
18
>>> del c1.x #原来得通过delSize()删除size,现在可以通过删除x做到
>>> c1.size
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
c1.size
AttributeError: 'C' object has no attribute 'size'