和类相关的BIF

Posted 。低调ヽ继续

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了和类相关的BIF相关的知识,希望对你有一定的参考价值。

  issubclass(class,classinfo),判断第一个参数是第二个参数的子类,这个判断是比较宽松的判断。因为第二个参数也可以是元组,并且只要参数1是元组内任意一个元素的子元素,就会返回True。

>>> class A:
    pass

>>> class B:
    pass

>>> class C(A):
    pass

>>> issubclass(C,A)
True
>>> issubclass(C,B)
False
#C是元组内任意一个元素的子类即返回True
>>> issubclass(C,(A,B))
True
>>> issubclass(C,(B,A))
True
C同时是C自己的子类
>>> issubclass(C,C)
True
#object是所有类的基类
>>> issubclass(A,object)
True

  isinstance(object,classinfo),判断参数1是参数2(一定要是一个类,如果不是类那么会抛出TypeError)的对象:

#实例化一个c
>>> c = C()
#判断c是C的实例化对象
>>> isinstance(c,C)
True
#判断c是B的实例化对象
>>> isinstance(c,B)
False
#由于C是A的子类,所以c也是A的对象
>>> isinstance(c,A)
True
#由于object是所有类的基类所以c也是object的实例化对象
>>> isinstance(c,object)
True
#判断c是否是元组内某个元素的实例化对象
>>> isinstance(c,(A,B))
True
# 当第二个参数不是类的时候,抛出TypeError异常
>>> isinstance(c,1)
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    isinstance(c,1)
TypeError: isinstance() arg 2 must be a type or tuple of types
>>> 

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

>>> class C(A):
    def __init__(self,x):
        self.x = x #为属性x赋初始值

        
>>> c = C(10)
#判断x是否是对象c中的属性 参数2一定要加引号
>>> hasattr(c,x)
True
>>> hasattr(c,a)
False
#如果参数2不带引号,则会抛出异常
>>> hasattr(c,x)
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    hasattr(c,x)
NameError: name x is not defined
>>> 

       getattr(object,name[,default]),在一个对象中获取指定属性,参数1(object)是实例化对象,参数2(name)是属性名,参数3(default)是可选参数,当不设置参数3的时候如果这个时候访问的属性不存在,则会抛出异常,但是如果设置参数3,则会将参数3抛出,相对比较友好。

>>> getattr(c,x)
10
>>> getattr(c,xx)
Traceback (most recent call last):
  File "<pyshell#49>", line 1, in <module>
    getattr(c,xx)
AttributeError: C object has no attribute xx
>>> getattr(c,xx,您访问的属性不存在)
您访问的属性不存在
>>> 

  setattr(object,name,value),访问对象属性,并且给该属性赋值,如果该属性不存在,则会为该对象创建该属性,并且赋值,三个参数都不能为空

>>> setattr(c,y,我爱中国)
>>> getattr(c,y)
我爱中国
>>> setattr(c,y)
Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    setattr(c,y)
TypeError: setattr expected 3 arguments, got 2
>>> setattr(c,y,爱国主义者)
>>> getattr(c,y)
爱国主义者
>>> 

  delattr(object,name),删除对象属性,如果属性不存在,抛出异常

>>> delattr(c,y)
>>> delattr(c,xx)
Traceback (most recent call last):
  File "<pyshell#59>", line 1, in <module>
    delattr(c,xx)
AttributeError: xx
>>> 

  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)

>>> 
>>> c1 = C()
#在没有定义property以前我们访问和设置方法属性
>>> c1.setSize(10)
>>> c1.getSize()
10
#定义了property之后我们访问和设置方法属性
>>> c1.x
10
>>> c1.x = 20
>>> c1.x
20
>>> del c1.x
>>> c1.x
Traceback (most recent call last):
  File "<pyshell#85>", line 1, in <module>
    c1.x
  File "<pyshell#76>", line 5, in getSize
    return self.size
AttributeError: C object has no attribute size
>>> 

 

以上是关于和类相关的BIF的主要内容,如果未能解决你的问题,请参考以下文章

课时40:类与对象:一些相关的BIF

类相关的BIF

python24 跟类相关的BIF

[Python]小甲鱼Python视频第040课(类和对象:一些相关的BIF )课后题及参考解答

转五种常见的 PHP 设计模式

区分成员变量和类变量,this关键字,封装,静态方法和静态代码块,通通给我看懂(概念版) 后续有相关示例