Python3 类和对象:与类和对象相关的BIF

1、判断一个类为另一个类的子类

issubclass(class,classinfo)判断第一个参数是否为第二参数的子类

注意:1、这是不严格判断,因为一个类被认为是自身的子类

   2、classinfo 可以是类对象组成的元组,只要class是其中任何一个候选的子类则返回Ture

   3、在其他情况下抛出TypeError的错误

class A:
    def __init__(self):
        print('我是A类')


class B(A):
    def __init__(self):
        print('我是B类继承A')



class C(B):
    def __init__(self):
        print('我是C类继承B')

>>> issubclass(C,A)
True
>>> issubclass(C,B)
True
>>> issubclass(A,A)
True
>>> issubclass(A,object)#所有类的父类都是object
True
>>> issubclass(A,C)
False
>>> issubclass(C,(A,B))
True
>>> 

2、判断一个对象是否属于该类

isinstance(object,classinfo)

注意:1、如果第一个参数不是对象则永远返回False

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

class A:
    def __init__(self):
        print('我是A类')


class B(A):
    def __init__(self):
        print('我是B类继承A')



class C:
    def __init__(self):
        print('我是C类')
>>> a=A() 我是A类
>>> isinstance(a,A) True >>> isinstance(a,(C,A)) True >>> isinstance(B,(C,A)) False >>> isinstance(B,a) Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> isinstance(B,a) TypeError: isinstance() arg 2 must be a type or tuple of types

3、判断对象是否存在某种属性

hasattr(object,name)

注意:name要用单引号‘’括起来

class A:
    size=10
    def __init__(self):
        print('我是A类')


>>> hasattr(A,'size')
True

4、获取对象的属性

getattr(object,name,default)

注意:当对象无该属性时如果default没赋值则会报错,如果赋值则返回default的值

class A:
    size=10
    def __init__(self):
        print('我是A类')
>>> getattr(A,'lenth','不存在该属性')
'不存在该属性'

 

5、新建对象属性和删除属性的方法

新建

1、直接对象.属性 新建属性

2.setattr(object,name,value)#name加单引号

删除

delattr(类对象,name)

对类对象的属性的删除会影响到由该类所产生的实例对象,而不能用delattr(实例对象,name)来删除属性

class A:
    size=10
    def __init__(self):
        print('我是A类')

>>> a=A()
我是A类
>>> a.size
10
>>> a.y=1
>>> a.y
1
>>> a.size
10
>>> A.y
Traceback (most recent call last):
  File "<pyshell#82>", line 1, in <module>
    A.y
AttributeError: type object 'A' has no attribute 'y'
>>> A.U=0
>>> a.U
0
>>> delattr(A,'U')
>>> a.U
Traceback (most recent call last):
  File "<pyshell#88>", line 1, in <module>
    a.U
AttributeError: 'A' object has no attribute 'U'

6、property

引用小甲鱼:http://bbs.fishc.com/thread-51106-1-1.html

class C:
    def __init__(self, size=10):
        self.size = size

    def getXSize(self):
        return self.size

    def setXSize(self, value):
        self.size = value

    def delXSize(self):
        del self.size

        x.property(getXSize,setXSize,delXSize)

>>> c.x
10
>>> c.x = 12
>>> c.x
12
#使用函数修饰符
class C:
    def __init__(self, size=10):
        self.size = size
        
    @property
    def x(self):
        return self.size

    @x.setter
    def x(self, value):
        self.size = value

    @x.deleter
    def x(self):
        del self.size

7、函数修饰符

http://bbs.fishc.com/thread-51109-1-1.html

 

posted @ 2018-02-06 22:05  消灭猕猴桃  阅读(231)  评论(0编辑  收藏  举报