51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Python - 类中的对象与属性

本文整理类中对象与属性(变量)相关知识。

类对象与实例对象 {#类对象与实例对象}

建立测试类:

类对象 {#类对象}

建立类进行编译后则形成了类对象,类对象仅支持两个操作:

  • 实例化:使用instance_name = class_name()的方式实例化,实例化操作创建该类的实例。
  • 属性引用:使用class_name.attr_name的方式引用类属性。

实例对象 {#实例对象}

类对象实例化得到实例对象,实例对象仅支持一个操作:

  • 属性引用;与类对象属性引用的方式相同,使用instance_name.attr_name的方式

类变量与实例变量 {#类变量与实例变量}

建立测试类:

类变量 {#类变量}

可由类对象引用

由所有实例共享

实例变量 {#实例变量}

由实例对象引用

仅在当前实例保存 类对象不能引用实例变量:

属性绑定 {#属性绑定}

建立测试类: 在定义、使用类、实例对象属性过程中,其实涉及两个过程:

  • 类属性绑定
  • 实例属性绑定

使用绑定一词事实上更加确切,可以理解为属性并不是属于类或实例的,Python中一切皆对象,每个属性也都是一个个现货鲜活的对象,之所以这些对象被称之为、用作于属性,是因为我们将这部分对象绑在了类对象可使用的属性名称上;

换一种说法,对象就是对象,而世上本没有属性,当对象被绑定在类/实例上,对象也就成了类/实例的属性

因此绑定属性,首先需要有一个对象才行。

类属性绑定 {#类属性绑定}

Python作为动态语言,类对象和实例对象都可以在运行时绑定任意属性,因此类属性绑定有两种时机:

  • 编译类时(写在类中的类属性)
  • 运行时

实例属性绑定 {#实例属性绑定}

实例属性绑定也发生在两个时机:

  • 实例生成时
  • 运行时

属性引用 {#属性引用}

上文中对属性的使用事实上都是在引用类对象或实例对象中的属性。

需要特别说明的是实例对象的属性引用冲突的问题,当类中存在同名的实例属性与类属性时:

  • 由于类对象无法访问实例属性,因此对类对象的属性引用没有影响
  • 实例属性有权访问二者,实现上会优先引用实例级的属性,即同名的类属性会被覆盖

获取源码 {#获取源码}

文中测试环境与所有源码可在Github下载。


文章链接:
https://www.zywvvd.com/notes/coding/python/python-class-var/python-class-var/

赞(0)
未经允许不得转载:工具盒子 » Python - 类中的对象与属性