Python 类变量和实例变量的区别
Python中的变量
面向对象编程 允许开发人员在类级别或实例级别使用变量。变量是程序中使用的一个值的必要符号。
类级别的变量被称为 类变量 ,而实例级别的变量被称为 实例变量 。
每当我们期望变量在各个实例中保持一致,或者每当我们需要初始化一个变量时,那么该变量可以在类级别定义。每当我们期望变量在各个实例中显著变化时,那么该变量可以在实例级别定义。
软件开发的各种原则之一是 DRY 原则,其缩写为 不要重复自己 。该原则旨在限制代码中的重复,并且面向对象编程遵循DRY原则,因为它减少了冗余。
在以下教程中,我们将了解面向对象编程中的类变量和实例变量,在Python编程语言中讨论这两种变量之间的根本区别。
所以,让我们开始吧。
理解类变量
类变量在类的构造中声明。由于这些变量是类本身拥有的,它们由所有类实例共享。因此,除非我们在使用类变量初始化变量,否则它们通常对每个实例具有相同的值。
按照惯例,类变量在所有方法之外被定义,经典上放置在类的头部和构造方法之前以及其他函数之前。
让我们来看一下类变量的语法。
语法:
# defining the class
class Class_name:
# declaring the variable in the class
var = "xyz"
在上面的代码片段中,“ var ”变量被赋予“ xyz ”的值。
我们可以定义一个 Class_name 类的对象(我们称之为“ myObj ”),并通过点表示法打印变量:
语法:
# defining the class
class Class_name:
# declaring the variable in the class
var = "xyz"
# instantiating the class
myObj = Class_name()
让我们考虑以下基于类变量概念的示例。
示例:
# defining a class
class Animal:
# declaring the class variable
Terrestrial = "Lion"
# instantiating the class
my_Animal = Animal()
# printing the values
print("Name of the Animal:", my_Animal.Terrestrial)
输出:
Name of the Animal: Lion
解释:
在上面的代码片段中,我们定义了一个名为 Animal 的类,并声明了类变量。然后我们用 my_Animal 对象实例化了这个类,并打印出用户的最终值。因此,该程序返回了类变量的值。
让我们尝试给类添加多个类变量并打印它们的值。
示例:
# defining a class
class Animal:
# declaring some class variables
Terrestrial = "Lion"
Location = "Jungle"
Type = "Carnivore"
Population = 20000
# instantiating the class
my_Animal = Animal()
# printing the values
print("Name of the Animal:", my_Animal.Terrestrial)
print("This Animal is found in:", my_Animal.Location)
print("This Animal is a:", my_Animal.Type)
print("Population of this Animal:", my_Animal.Population, "approx.")
输出:
Name of the Animal: Lion
This Animal is found in: Jungle
This Animal is a: Carnivore
Population of this Animal: 20000 approx.
解释:
在上面的代码片段中,我们定义了一个类并声明了一些变量给该类。然后我们实例化这个类,并打印出用户所需的输出。我们可以观察到这些类变量可以包含Python中可用的任何数据类型。就像在上面的程序中,我们有字符串和一个整数。
此外,我们还可以观察到 myAnimal 对象可被类中的所有变量访问,并在我们执行程序时打印它们。
类变量使我们能够在构建类时定义变量。这些变量及其对应的值对类的每个对象都是可访问的。
了解实例变量
属于类实例的变量称为 实例变量。 这个声明意味着对于类的每个实例或对象,实例变量是不同的。
与类变量不同,实例变量是在函数内部定义的。
使用实例变量的语法如下所示。
语法:
# defining the class
class Class_name:
# using the initializing function
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
在上面的代码片段中,var1和var2是实例变量。
让我们来看一个基于实例变量的示例
示例:
# defining the class
class Student:
# using the initializing function
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
# instantiating the class
dBase = Student(102, "Sam", 13)
# printing the required values
print("Roll Number of the Student:", dBase.id)
print("Name of the Student:", dBase.name)
print("Age of the Student:", dBase.age)
输出:
Roll Number of the Student: 102
Name of the Student: Sam
Age of the Student: 13
说明:
在以上代码片段中,我们定义了一个 Student 类,并在构造方法中定义了一些变量,如 id,name 和 age 作为参数。然后我们实例化了该类,并打印了用户实例变量的值。
因此,我们将获得一个由为 dBase 实例初始化的变量值组成的虚构结果。
实例变量由类对象拥有,使开发者能够在分配给这些变量的每个实例中存储不同的值。
了解类变量和实例变量的区别
既然我们已经了解了两种变量的基本概念以及这些变量如何在类中使用,让我们了解一下 类变量 与 实例变量 之间的区别。这两种变量之间的主要区别如下表所示:
序号 | 类变量 | 实例变量 |
---|---|---|
1 | 类变量是为类定义的特定属性或属性。 | 实例变量是指定给实例的值,并在不同实例之间共享的变量。 |
2 | 我们可以在类及其子类之间共享这些变量。 | 我们不能在类之间共享这些变量。但是,它们只适用于特定的类。 |
3 | 即使在类中没有实例对象,它通常为类的每个实例支持一个共享值。 | 它通常为类所需的数据存储内存。 |
4 | 它通常在程序执行开始时定义。 | 它通常在创建类的实例时定义。 |
5 | 它通常在程序结束时重新收集值。 | 它通常在对象存在时重新收集值。 |
6 | 它只有一个类变量的副本,因此在各个类对象之间共享。 | 它有多个副本,所以每个对象都有自己的实例变量副本。 |
7 | 我们可以通过类名调用这些变量来访问它们。 | 我们可以直接通过在类内调用变量名来访问这些变量。 |
8 | 我们必须使用static关键字来声明这些变量。 | 我们必须在不使用static关键字的情况下声明这些变量。 |
9 | 通过一个对象对这些变量进行的任何更改都会在另一个对象中复制。 | 通过一个对象对这些变量进行的任何更改都不会在另一个对象中复制。 |