如何在 Python 中声明一个没有值的属性?


在本文中,我们将向您展示如何在 Python 中声明一个没有值的属性。

在 Python 以及其他几种语言中,存在一个表示“无值”的值。在 Python 中,这个无值的值是None,让我们看看它是如何使用的。

你根本做不到。在 Python 中,变量只是名称。名称总是指代一个对象(“已绑定”)。按照惯例,将那些尚未具有有意义的值但应该存在的名称设置为 None。

方法一:直接用 None 初始化

我们可以直接用 None 值赋值给属性。通过创建一个类并在类中用 None 初始化两个变量。

# creating a class with the name Student class Student: # initiaizing the values of instance variables with None StudentName = None RollNumber = None

不过,这些更像是实例变量,而不是类变量,所以我们不妨写成

与其像上面那样写,我们可以使用 self 关键字在构造函数__init__()方法中实例化实例变量(在 Python 中,__init__ 是保留方法之一。它在面向对象编程中被称为构造函数。当从类创建对象并且需要访问来初始化类的属性时,会调用 __init__ 函数)。

这里的self用于指向实例变量(self 代表类的实例。它将属性与提供的参数绑定。我们使用 self 是因为 Python 不使用“@”语法来引用实例属性)。

示例

# creating a class with the name Student class Student(object): # creating a init constructor def __init__(self): # initiaizing the values of instance variables with None self.StudentName = None self.RollNumber = None

方法二

算法(步骤)

以下是执行所需任务的算法/步骤:

  • 创建一个名为Student的类。

  • 创建一个__init__构造函数,将 StudentName 和 RollNumber 作为参数传递给它。

  • 在构造函数内部,使用self属性初始化实例变量的值(self 代表类的实例。它将属性与提供的参数绑定)。

  • 通过将 StudentName 和 RollNumber 参数值传递为 None 并调用它来创建 Student 类的对象。

  • 使用上述学生类对象打印 StudentName 属性的值。

  • 使用 (.) 符号使用上述学生类对象打印 RollNumber 属性的值。这里 (.) 符号用于访问属性。

示例

# creating a class with the name Student class Student(object): # creating an init constructor by passing the StudentName, and RollNumber as arguments to it def __init__(self, StudentName, RollNumber): # initiaizing the values of instance variables self.StudentName = StudentName self.RollNumber = RollNumber # creating an object of the Student class by passing # StudentName, RollNumber values as None and calling it studentObj= Student(None, None) # printing the value of the StudentName attribute print('The value of the StudentName attribute is:',studentObj.StudentName) # printing the value of the roll number attribute print('The value of the RollNumber attribute is:',studentObj.RollNumber)

输出

The value of the StudentName attribute is: None
The value of the RollNumber attribute is: None

方法三

为什么我们需要初始化属性?

让我们通过在不为实例属性赋值的情况下打印它们的值来回答这个问题

示例

class Student: StudentName RollNumber print(StudentName, RollNumber)

输出

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    class Student:
  File "main.py", line 2, in Student
    StudentName
NameError: name 'StudentName' is not defined

StudentNameRollNumber以及 print(StudentName, RollNumber) 被解析为表达式。由于它们尚未赋值,因此会得到一个NameError

Python 中的变量必须在赋值语句中定义之后才能在表达式中使用;否则,将返回 NameError。值得注意的是,这里的“之前”指的是“执行顺序”,而不是“源代码顺序”。还有更多内容(import 语句、全局变量、命名空间技巧),但我们现在先保持简单。

要定义一个“没有值”的变量,只需将其赋值为 None,这是惯用的方法

此外,您的代码似乎正在寻找实例成员而不是类成员。一些静态分析工具,例如 pylint,识别惯用的方法来实现它,如下所示

算法(步骤)

以下是执行所需任务的算法/步骤:

  • 在构造函数内部,使用self关键字用 None 初始化实例变量的值,并使用 self 关键字和 (.) 运算符打印学生姓名和学号的值

  • 创建一个 Student 类的对象。然后它将默认调用 __init__ 方法(在这里它初始化并在构造函数中打印值)。

示例

# creating a class with the name Student class Student(object): # constructor of the student class def __init__(self): # initiaizing the values of attributes with None self.studentName = None self.rollNumber = None print('The Value of Student Name:',self.studentName) print('The Value of Roll Number:',self.rollNumber) #Creating the Object for the student class studentObject=Student()

输出

The Value of Student Name: None
The Value of Roll Number: None

此外,良好的 Python 实践是从“object”派生所有类,以便您可以使用新式类并使用lowercase_with_underscoreinitialLowerWithCaps约定命名实例变量。类名几乎总是以 InitialCaps 格式编写。

方法四:使用 @dataclass 装饰器

此函数是一个装饰器,用于向类添加生成的特殊方法。

dataclass模块在 Python 3.7 中引入,作为创建专门用于数据存储的结构化类的实用工具。这些类具有处理数据及其表示的特定属性和函数。

示例

# importing dataclasses from dataclasses import dataclass @dataclass class Student: StudentName: str rollNumber: str

在这里,我们创建了两个类型为字符串的类属性。默认情况下,学生姓名和学号的值将为None

结论

在本文中,我们学习了如何使用几种方法用 None 值声明类属性。我们还学习了面向对象编程中的 __init__() 函数和 self 关键字。

更新于:2022年9月22日

4K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告