Python 中的属性含义

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

如果我们接触过面向对象编程(OOPS)语言,肯定经常听到“属性”这个词。属性有两种类型——类属性和实例属性。本教程将解释什么是属性及其类型,并提供示例。

Python 是面向对象编程(OOPS)范式的坚定支持者,一切都被视为对象。我们创建类和对象。在理解属性之前,理解类和对象是基础。简单来说,类就像一个蓝图,要使用这个蓝图,我们需要为该类创建对象

示例

输出

Delhi public school
School: Delhi public school
Place: Delhi
grade: 5
Delhi public school
School: Delhi public school
Place: Delhi
grade: 5

理解

在上面的例子中,我们创建了一个名为“student”的类,其中包含三个变量和一个打印这三个变量值的函数。类的每个对象都可以访问类中的变量。这些变量称为“属性”,函数称为方法(也称为函数)。在上面的程序中,我们创建了类的两个对象 s1 和 s2,并访问了属性 sch_name,并且 display() 方法打印了属性的值。

属性类型

类属性(Class Attributes)

  • 在之前的例子中,我们声明了那些不会改变的属性,这意味着对于我们为类创建的任何对象,属性的值都保持不变。
  • 这些属性称为“类属性”。

示例

输出

Student1: Ryan
Harvard  Cambridge  Massachusetts  Boston  United States
Student2: Tony
Harvard  Cambridge  Massachusetts  Boston  United States
  • 请注意,类中的信息存储了代表大学地址的相同值,并且我们为所有学生对象使用了相同的信息。

实例属性(Instance Attributes)

  • 如果我们想创建一个允许每个对象拥有自己的属性的类,该怎么办?这也是可能的。例如,每个对象都应该包含有关单个学生的信息。
  • 这类允许对象对同一属性持有不同值的类属性称为“实例属性”。
  • 我们需要使用 __init__ 方法和 self 变量来声明这些属性。
  • __init__ 方法:它是一个构造函数,允许对象对同一个属性拥有不同的值。一旦为类创建对象,它就会被执行,无需手动调用。
  • self 变量:在 __init__ 方法中,它就像是为类创建的对象的一个占位符。

示例

输出

Student1: 
Ryan 18 NYU
Student1: 
Roy 18 Duke
  • 我们创建了两个对象 student1 和 student2,这两个对象包含了两个不同个体的不同信息。
  • 这里发生的是,一旦创建对象,__init__ 方法就会被调用,对象将替换方法中的 self 变量。

当我们创建 student1 时

当我们创建 student2 时

实例属性和类属性在创建良好的类方面都起着重要作用。以下是一个结合使用类变量和实例变量来创建类的示例。

输出

Student1:
Ryan 18 9.2
Harvard Cambridge Massachusetts Boston United States

Student2:
Roy 18 9.1
Harvard Cambridge Massachusetts Boston United States
  • 我们使用类属性来存储所有对象共有的数据,并使用实例属性来存储每个对象的独立数据。
  • 另外,请注意
  1. 类属性总是在 __init__ 方法之外。
  2. 实例属性定义在 __init__ 方法之内。
  • 在上面的代码中

类属性

  1. 大学
  2. 城市
  3. 国家
  4. 资本
  5. 国家

实例属性

  1. name
  2. 年龄
  3. CGPA

在程序中显示属性的函数

Python 提供了两个内置函数,可以打印特定对象的属性。

  1. dir() -> 它返回对象的类属性和实例属性,以及对象祖先类的属性。
  2. vars() -> 它以字典的形式返回对象的实例属性

示例

输出

{'name': 'Ryan', 'age': 18, 'CGPA': 9.2}

['CGPA', 'Capital', 'City', 'Country', 'State', 'University', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name']