鱼C论坛

 找回密码
 立即注册
查看: 1896|回复: 0

[技术交流] 《零基础入门学习python》第四十讲笔记:类和对象:一些相关的BIF

[复制链接]
发表于 2017-8-30 17:17:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
issubclass(class,classinfo) :如果class是classinfo的子类,就返回True

这个内置函数有几点需要注意的:
1.一个类被认为是其自身的子类
2.classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True

  1. >>> class A:
  2.             pass

  3. >>> class B(A):  # B是A的子类
  4.              pass

  5. >>> issubclass(B,A)
  6. True
  7. >>> issubclass(B,B)  # 自身是自身的子类
  8. True
  9. >>> issubclass(B,object)  # object是所有类的基类
  10. True
  11. >>> class C:
  12.             pass

  13. >>> issubclass(B,C)
  14. False
  15. >>>
复制代码



isinstance(object,classinfo): 检查一个实例对象是否属于某个类的
需要注意的有:
1.如果第一个参数不是对象,则永远返回False
2.如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常

  1. >>> issubclass(B,C)
  2. False
  3. >>> b1 = B()
  4. >>> isinstance(b1,B)
  5. True
  6. >>> isinstance(b1,A)  # 因为B类是A的子类,所以这个也符合
  7. True
  8. >>> isinstance(b1,C)
  9. False
  10. >>> isinstance(b1,(A,B,C))  # 第二个参数是元组,只要有一个符合就返回True
  11. True

复制代码




hasattr(object,name)   attr = attribute:属性       测试一个对象是否有指定的属性

  1. >>> class C:
  2.     def __init__(self,x=0):
  3.         self.x = x


  4. >>> c1 = C()
  5. >>> hasattr(c1,'x')  # 第二个参数需加双引号
  6. True
  7. >>> hasattr(c1,x)  # 不加的话会认为是一个变量
  8. Traceback (most recent call last):
  9.   File "<pyshell#25>", line 1, in <module>
  10.     hasattr(c1,x)
  11. NameError: name 'x' is not defined
复制代码


getattr(object,name[,default]) : 返回对象指定的属性值,如果指定的属性不存在,如果有设置default,
那么会将default参数打印出来,否则会抛出attributeerror

  1. >>> getattr(c1,'x')
  2. 0
  3. >>> getattr(c1,'y')  # 访问不存在的属性
  4. Traceback (most recent call last):
  5.   File "<pyshell#27>", line 1, in <module>
  6.     getattr(c1,'y')
  7. AttributeError: 'C' object has no attribute 'y'
  8. >>> getattr(c1,'y','您所访问的属性不存在。。。')   # 添加第三个参数
  9. '您所访问的属性不存在。。。'

复制代码

setattr(object,name,value) : 设置对象中指定属性的值,如果指定属性不存在,会新建一个新属性并给其赋值

  1. >>> setattr(c1,'y','FishC')
  2. >>> getattr(c1,'y','您所访问的属性不存在。。。')
  3. 'FishC'
复制代码



delattr(object,name) : 删除对象中指定的属性,如果属性不存在,则抛出AttributeError异常


  1. >>> delattr(c1,'y')  # 删掉c1对象的y属性
  2. >>> delattr(c1,'y')  # 再删就报错了
  3. Traceback (most recent call last):
  4.   File "<pyshell#32>", line 1, in <module>
  5.     delattr(c1,'y')
  6. AttributeError: y
复制代码


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)   # x是一个属性


  11. >>> c1 = C()
  12. >>> c1.getSize()
  13. 10
  14. >>> c1.x
  15. 10
  16. >>> c1.x = 18
  17. >>> c1.x
  18. 18
  19. >>> c1.size
  20. 18
  21. >>> c1.getSize()
  22. 18
  23. >>> del c1.x
  24. >>> c1.size
  25. Traceback (most recent call last):
  26.   File "<pyshell#55>", line 1, in <module>
  27.     c1.size
  28. AttributeError: 'C' object has no attribute 'size'
复制代码

评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-7 01:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表