• Python一切皆对象


    目录

      1 引言

      2 对象的概念

      3 对象的创建和引用

      4 共享引用

      5 对象相等

      6 对象回收机制  

    1 引言  

      Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象。

        Java虽然也是面向对象编程的语言,但是血统没有Python纯正。比如Java的八种基本数据类型之一int,在持久化的时候,就需要包装成Integer类对象。但是在python中,一切皆对象。数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象,包括你的代码。

    2 对象的概念

      究竟何谓对象?不同的编程语言以不同的方式定义“对象”。某些语言中,它意味着所有对象必须有属性和方法;另一些语言中,它意味着所有的对象都可以子类化。

      在Python中,定义是松散的,某些对象既没有属性也没有方法,而且不是所有的对象都可以子类化。但是Python的万物皆对象从感性上可以解释为:Python 中的一切都可以赋值给变量或者作为参数传递给函数。

      Python 的所有对象都有三个特性:

        身份:每个对象都有一个唯一的身份标识自己,任何对象的身份都可以使用内建函数 id() 来得到,可以简单的认为这个值是该对象的内存地址。

        类型:对象的类型决定了对象可以保存什么类型的值,有哪些属性和方法,可以进行哪些操作,遵循怎样的规则。可以使用内建函数 type() 来查看对象的类型。

        值:对象所表示的数据。

       "身份"、"类型"和"值"在所有对象创建时被赋值。如果对象支持更新操作,则它的值是可变的,否则为只读(数字、字符串、元组等均不可变)。只要对象还存在,这三个特性就一直存在。

       对象的属性:大部分 Python 对象有属性、值或方法,使用句点(.)标记法来访问属性。最常见的属性是函数和方法,一些 Python 对象也有数据属性,如:类、模块、文件等。

    3 对象的创建和引用

      

      简单来看,上边的代码执行了以下操作:

    • 创建了一个对象来代表数字 4
    • 如果变量 a 不存在,创建一个新的变量 a
    • 将变量 a 和数字 4 进行连接,即 a 成为对象 4 的一个引用,从内部来看,变量是到对象的内存空间的一个指针,尤其注意:变量总是连接到对象,而不会连接到其他变量。

      从概念上可以这样理解,对象是堆上分配的一个内存空间,用来表示对象所代表的值;变量是一个系统创建的表中的元素,拥有指向对象的引用;引用是从变量到对象的指针。

      从技术上来说,每一个对象有两个标准的头部信息,一个类型标识符来标识类型,还有一个引用的计数器,用于决定是否需要对对象进行回收。这里还涉及到对象的一种优化方法,Python 缓存了某些不变的对象对其进行复用,而不是每次创建新的对象。

      

    4 共享引用

      在 Python 中变量都是指向某一对象的引用,当多个变量都引用了相同的对象,成为共享引用。

      但对于像列表这种可变对象来说则不同。

      由于列表的这种可变性,在代码执行某些操作时可能出现一些意外,因此需要对其进行拷贝来保持原来的列表。

      对于字典和集合等没有分片概念的类型来说,可以使用 copy 模块中的 copy() 方法进行拷贝。

    5 对象相等

       == 操作符用于测试两个被引用的对象的值是否相等。
      is 用于比较两个被引用的对象是否是同一个对象。

     

      当操作对象为一个较小的数字或较短的字符串时,又有不同:

      这是由于 Python 的缓存机制造成的,小的数字和字符串被缓存并复用,所以 a 和 b 指向同一个对象。

    6 对象回收机制

      上边提到对象包含一个引用的计数器,计数器记录了当前指向该对象引用的数目,一旦对象的计数器为 0 ,即不存在对该对象的引用,则这个对象的内存空间会被回收。这就是 Python 中对象的回收机制,一个最明显的好处即在编写代码过程中不需要考虑释放内存空间。

      可以通过 sys 模块中的 getrefcount() 函数查询一个对象计数器的值:

     

    文章转载自:

    Python一切皆对象(https://www.cnblogs.com/wangxin37/p/6598466.html)

  • 相关阅读:
    用 ArcMap 发布 ArcGIS Server FeatureServer Feature Access 服务 PostgreSQL 版本
    ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
    ArcScene 创建三维模型数据
    ArcMap 导入自定义样式Symbols
    ArcMap 导入 CGCS2000 线段数据
    ArcMap 导入 CGCS2000 点坐标数据
    ArcGis Server manager 忘记用户名和密码
    The view or its master was not found or no view engine supports the searched locations
    python小记(3)操作文件
    pytest(2) pytest与unittest的区别
  • 原文地址:https://www.cnblogs.com/caihongmin/p/10967300.html
Copyright © 2020-2023  润新知