一些相关的BIF
issubclass(class, classinfo) 如果第一个参数(class)是第二个参数(classinfo)的一个子类,则返回True,否则返回False
1 >>> class A:
2 pass
3
4 >>> class B(A):
5 pass
6
7 >>> issubclass(B,A)
8 True
9 >>> issubclass(B,B) #一个类被认为是其自身的子类
10 True
11 >>> issubclass(B,object) # object是所有类的基类
12 True
13 >>> class C:
14 pass
15
16 >>> issubclass(B,C)
17 False
isinstance(object, classinfo) 如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回True,否则返回False
1 >>> issubclass(B,C) 注:第一个参数如果不是对象,则永远返回False
2 False
3 >>> b1 = B()
4 >>> isinstance(b1,B)
5 True
6 >>> isinstance(b1,C)
7 False
8 >>> isinstance(b1,A)
9 True
10 >>> isinstance(b1,(A,B,C))
11 True
hasattr(object, name) 用来测试一个对象里是否有指定的属性,第一个参数(object)是对象,第二个参数(name)是属性名(属性的字符串名字)
1 >>> class C:
2 def __init__(self,x=0):
3 self.x = x
4
5
6 >>> c1 = C()
7 >>> hasattr(c1,'x') #注意,属性名要用引号括起来
8 True
getattr(object, name[, default]) 返回对象指定的属性值,如果指定的属性不存在,则返回default(可选参数);若没有设置default参数,则抛出异常
1 >>> getattr(c1,'x')
2 0
3 >>> getattr(c1,'y')
4 Traceback (most recent call last):
5 File "<pyshell#25>", line 1, in <module>
6 getattr(c1,'y')
7 AttributeError: 'C' object has no attribute 'y'
setattr(object, name, value) 可以设置对象中指定属性的值,如果指定的属性不存在,则会新建属性并赋值
1 >>> setattr(c1,'y','FishC')
2 >>> getattr(c1,'y')
3 'FishC'
delattr(object, name) 用于删除对象中指定的属性,如果属性不存在,抛出异常。
1 >>> delattr(c1,'y')
2 >>> delattr(c1,'Z')
3 Traceback (most recent call last):
4 File "<pyshell#30>", line 1, in <module>
5 delattr(c1,'Z')
6 AttributeError: Z
property(fget=None, fset=None, fdel=None, doc=None) 用来通过属性设置属性,第一个参数是获取属性的方法名,第二个参数是设置属性的方法名,第三个参数是删除属性的方法名
1 >>> class C:
2 def __init__(self,size =10):
3 self.size = size
4 def getSize(self):
5 return self.size
6 def setSize(self,value):
7 self.size = value
8 def delSize(self):
9 del self.size
10 x=property(getSize,setSize,delSize)
11
12
13
14 >>> c = C()
15 >>> c.x #调用getSize()
16 10
17 >>> c.x = 12 #调用SetSize()
18 >>> c.x
19 12
20 >>> c.size
21 12
22 >>> del c.x #调用DelSize()
23 >>> c.size
24 Traceback (most recent call last):
25 File "<pyshell#53>", line 1, in <module>
26 c.size
27 AttributeError: 'C' object has no attribute 'size'