zoukankan      html  css  js  c++  java
  • 没对象的快自己写一个吧!带你了解一下python对象!

    学过java语言的童鞋都知道,java是一门面向对象语言,其基本思想就是一切皆对象。Python也是一样的,甚至Python将面向对象思想贯彻地更加彻底,因为在Python中,class本身是一个对象,class实例化出来的实例也是对象,方法函数是一个对象,甚至代码模块都是一个对象,这是java不曾拥有的。

    对象的一个重要特性就是可以被赋值给其他变量,我们说方法、函数、类都是对象,那么,当然也具有这一特性:

    In [1]:


    In [2]:



    甚至函数内部还可以将函数作为返回值,注意这一特性非常重要,因为这是Python装饰器的基础:

    In [20]:


    In [22]:


    Out[22]:

    再来看看类的赋值:

    In [17]:


    In [4]:


    In [5]:



    Out[5]:


    我们还可以继续讲类和函数放进一个list中:

    In [6]:


    In [7]:


    In [8]:


    Out[8]:


    可见,类和函数方法都是对象。

    2 class type object的关系

    在上文中我们说过,Python中一切皆对象,class也不例外,而class就是用来生成object的对象,那么,既然class也是一个对象,它又是谁生成的呢?没错,就是type,可以这么认为,type就是用来生成class(类)的一种对象。

    我们知道,Python中有一个type()方法,可以查看传递的实例是有哪个类生成的:


    可以看到,type(p)指向的是一个Person类。那么,如果我们对Person类使用type()呢?


    返回的是一个type,那么,我们可以认为,type是生成Person类的类。type这个类对象本身又是由谁生成的呢?


    可知,type对象也是由type本身生成的。所以,type是最顶层的类,一切类对象都是由type生成。

    对象和类是两种不同的概念,对象是一个具体的概念,是类这个模板生成出来的。在Python中,类既拥有作为一个对象的特性,也有用对象的特性,我们可以认为,Python类中所拥有的对象的特性是由type所生成、赋予的。那么,Python类所拥有的作为一个类的特性是谁赋予的呢?

    那就是object。

    在java中,任何一个没有明确指明继承关系的类,都继承object类,在Python中也不例外:


    调用类的 base 属性可以查看父类:


    在定义Person类时,我们没有指明继承关系,所以,默认就继承自object类。除了自定义的类外,Python的内置类型也一样继承自object:


    可知,object没有父类。

    继续,object类是不是对象呢?肯定是,因为Python无处不对象,那么,object是哪个类实例化生成的呢?


    可见,object是由type这个类生成的。type也是一个类,它的父类是什么呢?


    这里有点绕,type类实例化了object,type类由继承自object,这不矛盾。无论是type,还是object,它们即是对象,也是类,所以既拥有对象的特性,也拥有类的特性。刚说过,type掌管了对象的特性,object掌管了类的特性,所以两者相互依存。我们 用一幅图来说明,如下图所示,虚线表示对象实例化生成关系,实线表示类的继承关系。所有类都拥有对象的特信息,所以都由type实例化生成,所有对象都拥有类的特性,所以都继承自object。

    此文转载文,著作权归作者所有,如有侵权联系小编删除!

    原文地址:https://www.tuicool.com/articles/zyAV7vr

    需要源代码或者想了解更多的(点击这里查看)

  • 相关阅读:
    luogu P1630 求和(枚举暴力)
    luogu P3414 SAC#1
    luogu P1869 愚蠢的组合数(质因数+瞎搞)
    luogu P1586 四方定理(背包)
    luogu P3795 钟氏映射(递推)
    2017.8.15 [Haoi2016]字符合并 区间dp+状压dp
    [NOI2002] 荒岛野人 扩展欧几里得算法
    [Noi2002]Savage 扩展欧几里得
    bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
    bzoj 3505: [Cqoi2014]数三角形
  • 原文地址:https://www.cnblogs.com/wxys/p/13755361.html
Copyright © 2011-2022 走看看