美文网首页
关于python中的type和object

关于python中的type和object

作者: modi1492 | 来源:发表于2017-09-29 13:31 被阅读0次

    python中一切皆对象。一个对象有可能有下面两个属性。__class__ 和__base__

    __class__表示这个对象是谁创建的的它,__base__表示它的基类(基类又叫父类)是谁。(如果一个对象不是类,那么它当然没有基类,也就没有__base__属性。)

    下面通过练习学习__class__属性和__base__属性。


    练习1

    请问list、tuple、dict的__class__和__base__属性分别是什么?

    答:

    In [21]: list.__class__

    Out[21]: type        # 说明list对象是type创建的

    In [22]: list.__base__

    Out[22]: object       # 说明list对象的父类是object

    tuple、dict也相同。

    练习2

    mylist = "abcd",请问mylist的__class__和__base__属性分别是什么?

    In [23]: mylist = 'abcd'In [24]: mylist.__base__---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)in()

    ----> 1 mylist.__base__

    AttributeError: 'str' object has no attribute '__base__'

    In [25]: mylist.__class__

    Out[25]: str

    说明字符串是一个对象,但是这个对象不是一个类,所以没有类。

    字符串这个对象是list这个类创建的,所以__class__是str

    练习3,请问下面Sub_A的__class__属性是什么?

    In [26]: class A:

    ...:    pass

    In [27]: class Sub_A(A):

    ...:    pass

    答案:

    In [28]: Sub_A.__base__

    Out[28]: __main__.A

    In [29]: Sub_A.__class__

    Out[29]: type

    总结:如果不做其他设置,所有类都是由type创建的

    练习4,请问M的两个属性分别是什么?

    In [30]: class M(type):

    ...:    pass

    In [31]: M.__class__

    Out[31]: type

    In [32]: M.__base__

    Out[32]: type

    总结:M是一个普通类对象,所以他是由type创建的。因为它继承了type,所以它的父类是type

    练习5,请问TM的__class__属性是什么?

    In [1]: class M(type):

    ...:    pass

    ...:

    In [2]: class TM(object,metaclass=M):

    ...:    pass

    In [3]: TM.__class__

    Out[3]: __main__.M

    In [4]: TM.__base__

    Out[4]: object

    总结:TM是一个类对象,在创建的时候设置了元类是M,那么TM就是M创建的。

    相关文章

      网友评论

          本文标题:关于python中的type和object

          本文链接:https://www.haomeiwen.com/subject/gbkrjxtx.html