鱼C论坛

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

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

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

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

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

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

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

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

>>> issubclass(B,A)
True
>>> issubclass(B,B)  # 自身是自身的子类
True
>>> issubclass(B,object)  # object是所有类的基类
True
>>> class C:
            pass

>>> issubclass(B,C)
False
>>>


isinstance(object,classinfo): 检查一个实例对象是否属于某个类的
需要注意的有:
1.如果第一个参数不是对象,则永远返回False
2.如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常
>>> issubclass(B,C)
False
>>> b1 = B()
>>> isinstance(b1,B)
True
>>> isinstance(b1,A)  # 因为B类是A的子类,所以这个也符合
True
>>> isinstance(b1,C)
False
>>> isinstance(b1,(A,B,C))  # 第二个参数是元组,只要有一个符合就返回True
True



hasattr(object,name)   attr = attribute:属性       测试一个对象是否有指定的属性
>>> class C:
    def __init__(self,x=0):
        self.x = x


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

getattr(object,name[,default]) : 返回对象指定的属性值,如果指定的属性不存在,如果有设置default,
那么会将default参数打印出来,否则会抛出attributeerror
>>> getattr(c1,'x')
0
>>> getattr(c1,'y')  # 访问不存在的属性
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    getattr(c1,'y')
AttributeError: 'C' object has no attribute 'y'
>>> getattr(c1,'y','您所访问的属性不存在。。。')   # 添加第三个参数
'您所访问的属性不存在。。。'
setattr(object,name,value) : 设置对象中指定属性的值,如果指定属性不存在,会新建一个新属性并给其赋值
>>> setattr(c1,'y','FishC')
>>> getattr(c1,'y','您所访问的属性不存在。。。')
'FishC'


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

>>> delattr(c1,'y')  # 删掉c1对象的y属性
>>> delattr(c1,'y')  # 再删就报错了
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    delattr(c1,'y')
AttributeError: y

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


>>> c1 = C()
>>> c1.getSize()
10
>>> c1.x
10
>>> c1.x = 18
>>> c1.x
18
>>> c1.size
18
>>> c1.getSize()
18
>>> del c1.x
>>> c1.size
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    c1.size
AttributeError: 'C' object has no attribute 'size'

评分

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

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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