Python 中的属性 vs 属性的区别

2024 年 8 月 29 日 | 4 分钟阅读

在本教程中,我们将理解 Python 中属性(attribute)和特性(property)的区别。Python 中一切皆对象,每个类都有其属性、方法或函数。当我们使用面向对象编程语言时,会遇到“属性”和“特性”这两个术语。在英语中,特性和属性可以互换使用,但在编程中,它们是不同的。

因此,我们将讨论它们之间的一些关键区别。让我们先来介绍一下属性。

Python 中的属性(Attributes)

属性由数据变量定义,例如姓名、年龄、身高等等。在 Python 中,有两种类型的属性:

  • 类属性(Class Attributes)
  • 实例属性(Instance Attributes)

类属性(Class Attributes)

类属性是在类定义内部创建的,属于该类。这些属性被同一类的所有其他对象共享。让我们通过以下示例来理解:

示例 -

输出

1
2
2

解释 -

在上面的代码中,我们创建了一个名为 Student 的类,并为 count 分配了类属性。我们可以通过类的实例或类名本身来访问它。

实例属性(Instance Attribute)

对象是 Python 中类的实例。实例属性对于每个实例都是唯一的,每个对象/实例都拥有自己的属性,并且可以更改而不会修改其他实例。让我们通过以下示例来理解。

示例 -

输出

JavaTpoint
50000

现在我们对属性有了初步的了解;让我们来理解一下这个例子。

Python 中的特性(Properties)

特性是特殊的属性,包含 getter、setter 和 deleter 方法,例如 __get__、__set__ 和 __delete__ 方法。Python 提供了 @property 装饰器,可用于在 Python 代码中定义特性。装饰器可以在不改变其原始定义的情况下改变被包装函数的行为。

让我们理解以下示例 -

示例 -

输出

Getting message
Welcome to JavaTpoint
Setting message to Happy Learning!
Deleting message

解释 -

在上面的代码中,我们创建了一个将显示消息的类。首先,我们初始化了 message 属性,并使用 @property 装饰器定义了该特性。然后,我们解释了 setter 方法,该方法将在我们修改 message 时设置该消息。然后,我们描述了 deleter 方法。这些是 property 装饰器的独特之处。

我们也可以使用 property() 方法来定义特性。

示例 -

输出

Getting message
Welcome to JavaTpoint
Setting message to Happy Learning!
Deleting message

上面的代码与前面的代码类似。唯一的区别是,我们创建了 getter、setter 和 deleter() 方法,而不是使用装饰器。

属性(Attributes)与特性(Property)的对比

下表列出了属性和特性的区别。

属性属性
属性由 name、age、height 等数据变量定义。特性是特殊类型的属性。
属性有两种类型:
  • 类属性
  • 实例属性
特性方法带有 getter、setter 和 delete 方法,例如 __get__、__set__ 和 __delete__ 方法。
类属性定义在类体中,而不是在函数中。我们可以使用 property() 函数定义 getter、setter 和 delete 方法。
实例属性通常在 __init__() 方法中使用 self 关键字在类体中定义。要读取特性,我们可以使用 @property 装饰器,该装饰器可以添加到我们的方法上方。

结论

因此,在本教程中,我们学习了 Python 中属性和特性之间的显著区别。本教程包括 Python 中属性的类型以及 Python 中特性的概念。这将有助于更好地理解面向对象编程概念。