Python基础入门学习笔记 040 类和对象:一些相关的BIF

发布时间 2023-08-23 10:59:15作者: 一杯清酒邀明月

一些相关的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(objectclassinfo)  如果第一个参数(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=Nonefset=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'