如何在Python中声明没有值的属性?
在本文中,我们将展示如何在Python中声明没有值的属性。
在Python中,以及其他几种语言中,有一种没有值的值。在Python中,该没有值的值为 None ,让我们看看它是如何使用的。
你根本就不能声明属性而不赋值。在Python中,变量只是名称。名称始终指向一个对象(“绑定”)。惯例是将名称设置为尚未具有有意义值但应存在的None。
方法1:通过直接初始化它们为None
我们可以直接将属性赋值为None。通过创建一个类并在类中用None初始化两个变量。
# 创建一个名为Student的类
class Student:
# 使用None初始化实例变量的值
StudentName = None
RollNumber = None
这些像实例变量一样,而不是类变量,所以我们可能会写成下面这样
我们可以使用self关键字在构造函数中实例化实例变量 __init__() 方法(在Python中,init是保留方法之一,它被称为面向对象编程中的构造函数。当从类创建对象并需要访问以初始化类的属性时,将调用init函数)。
这里使用self指向实例变量(self表示类的实例。它将属性与提供的参数绑定在一起。我们使用self,因为Python不使用“@”语法引用实例属性))
例子
# 创建一个名为Student的类
class Student(object):
# 创建一个init构造函数
def __init__(self):
# 使用None初始化实例变量的值
self.StudentName = None
self.RollNumber = None
方法2
算法(步骤)
以下是执行所需任务的算法/步骤:
- 创建一个名为 Student。 的类
-
创建一个 __init__ 构造函数,将StudentName和RollNumber作为参数传递给它。
-
在构造函数中,使用self属性初始化实例变量的值(self表示类的实例。它将属性与提供的参数绑定在一起)。
-
通过传递StudentName和RollNumber参数值为None来创建Student类的一个对象并调用它。
-
使用上述学生类对象打印StudentName属性的值。
-
使用上述学生类对象使用(.)符号打印RollNumber属性的值。在这里,(.)符号用于访问属性。
例子
# 创建一个名为 Student 的类
class Student(object):
# 创建一个 init 构造器,把 StudentName 和 RollNumber 作为参数传递给它
def __init__(self, StudentName, RollNumber):
# 初始化实例变量的值
self.StudentName = StudentName
self.RollNumber = RollNumber
# 通过传递 StudentName 和 RollNumber 的值为 None 来创建 Student 类的对象,并调用它
studentObj= Student(None, None)
# 打印 StudentName 特性的值
print('StudentName 特性的值为:',studentObj.StudentName)
# 打印 RollNumber 特性的值
print('RollNumber 特性的值为:',studentObj.RollNumber)
输出
StudentName 特性的值为:None
RollNumber 特性的值为: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
StudentName 和 RollNumber 以及 print(StudentName, RollNumber) 被解析为表达式。由于它们尚未被分配,因此你会得到一个 NameError 。
在 Python 中,必须使用赋值语句定义变量,然后才能在表达式中使用它;否则,将返回 NameError。值得注意的是,这里的“之前”是指“执行顺序”,而不是“源代码顺序”。还有更多东西(import 语句、全局变量、命名空间黑客),但我们现在将保持简单。
要定义一个“没有值”的变量,只需将其赋值为值为 None 的值,这是 习惯用法 。
此外,你的代码似乎在寻找实例成员而不是类成员。一些静态分析工具,如 pylint,识别实现该操作的惯用方法如下:
算法(步骤)
进入构造函数,在使用 self 关键字初始化实例变量的值为 None 的同时,使用 self 关键字和 (.) 运算符打印学生姓名和学号的值
- 创建一个 Student 类对象。然后它将默认调用 init 方法(这里在构造函数内初始化和打印值)。
示例
# 创建一个名为Student的类
class Student(object):
# student类的构造函数
def __init__(self):
# 将属性的值初始化为None
self.studentName = None
self.rollNumber = None
print('学生姓名的值:',self.studentName)
print('学号的值:',self.rollNumber)
# 创建student类的对象
studentObject=Student()
输出
学生姓名的值: None
学号的值: None
另外,好的Python编程实践是从“object”派生所有类,以便使用新式类和使用小写加下划线或小写加驼峰的命名实例变量的约定。类名几乎总是以InitialCaps格式书写的。
方法4:使用@dataclass装饰器
这个函数是一个用于向类添加生成的特殊方法的装饰器
Python 3.7中引入了 dataclass 模块,用作创建专门用于数据存储的结构化类的实用工具。这些类具有特定的属性和函数,用于处理数据及其表示。
示例
# 导入dataclasses
from dataclasses import dataclass
@dataclass
class Student:
StudentName: str
rollNumber: str
这里我们创建了两个字符类型的类属性。默认情况下,学生姓名和学号的值都为 None。
结论
我们学习了如何使用本文中的几种方法声明具有None值的类属性。我们还学习了面向对象编程中的init()函数和self关键字。