【小甲鱼Python】类和对象:一些相关的BIF

笔记

issubclass(class,classinfo)

检测class是否为classinfo的子类,如是,则返回True,否则返回False。

1.该函数的检测是不严格的,一个类会被认为是其自身的子类;

2.classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,就返回True。

注:object是任何类的父类

 

isinstance(object,classinfo)

检测实例对象是否属于一个类(多层,多重继承的类也可以),同样是返回True或False。

classinfo可以是类对象组成的元组,只要object是其中任何一个候选类的子类,就返回True。

1.如果第一个参数不是对象,则永远返回False;

2.如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。

 

hasattr(object,name)

attr = attribute : 属性

检测某个对象中是否有某个属性。obeject参数是一个对象,name参数是一个字符串。

【小甲鱼Python】类和对象:一些相关的BIF_第1张图片

 

getattr(object,name[,default])

访问object对象中的name属性的值,并将其返回。如果该属性不存在,若设置了default参数的值,则返回该参数的值;若没设置,则抛出一个异常。

【小甲鱼Python】类和对象:一些相关的BIF_第2张图片

 

setattr(object,name,value)

设置对象中指定属性的值。如果该属性不存在,则会新建该属性并赋值。

 

delattr(object,name)

删除对象中指定的属性。如果该属性不存在,则抛出AttributeError的异常。

【小甲鱼Python】类和对象:一些相关的BIF_第3张图片

可以搭配hasattr()使用,如果存在,就删除。

 

property(fget = None,fset = None,fdel = None,doc = None)

将property函数赋值给一个属性,通过调用这个属性来调用对象的其他属性,常用作用户接口。

fget表示获得属性的值的方法,fset表示设置属性的值的方法,fdel表示删除属性的方法。

实例:

class C:
    def __init__(self,size=10):
        self.size = size
    def get_size(self):
        return self.size
    def set_size(self,value):
        self.size = value
    def del_size(self):
        del self.size
    x = property(get_size,set_size,del_size)

具体调用:

#先创建一个实例对象
>>> c1 = C()

#直接调用c1.x与调用c1.get_size()效果是一样的
>>> c1.get_size()
10
>>> c1.x
10

#直接对c1.x赋值就相当于调用c1.set_size()
>>> c1.set_size(20)
>>> c1.x
20
>>> c1.x = 30
>>> c1.x
30

#直接调用del c1.x相当于调用c1.del_size()
>>> del c1.x
>>> c1.x
Traceback (most recent call last):
  File "", line 1, in 
    c1.x
  File "C:/Users/57574/Desktop/test3.py", line 5, in get_size
    return self.size
AttributeError: 'C' object has no attribute 'size'

这样使用看上去似乎很多余,没有必要。但如果代码因为不可避因素修改了类中的方法名,对于用户而言,如果没有property函数,那就意味着用户也要知道修改后的方法名,才能正确调用。相反,如果使用了property函数,用户就可以一直调用c1.x的一系列操作进行和以前一样的操作,不需要知道新的方法名,用户体验更好。所以说,property就像是面向用户的一个接口。

你可能感兴趣的:(小甲鱼Python课后作业)