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实例化的变量的值。
实例变量由类对象拥有,使开发人员能够在分配给这些变量的每个实例中存储不同的值。
理解类变量和实例变量之间的区别
由于我们已经了解了这两种变量的基本概念以及如何在类中使用这些变量,让我们了解类变量与实例变量之间的主要区别,这两种变量之间的主要区别在下表中以表格形式描述:
S. No. | 类变量 | 实例变量 |
---|---|---|
1 | 类变量是用于定义类的特定属性或属性的变量。 | 实例变量是一个变量,其值是分配给实例并在不同实例之间共享的。 |
2 | 我们可以在类和其子类之间共享这些变量。 | 我们不能在类之间共享这些变量。但它们只适用于特定类。 |
3 | 通常情况下,它为类的每个实例支持一个共享值,即使类中没有实例对象也是如此。 | 它通常为类所需的数据存储内存。 |
4 | 通常情况下,在程序执行开始时定义它们。 | 通常情况下,在创建类的实例时定义它们。 |
5 | 通常情况下,它们会在程序结束时保持值不变。 | 通常情况下,只要对象存在,它们就会保持值不变。 |
6 | 它只有一个类变量的副本,因此它在各个类对象之间共享。 | 它有多个副本,因此每个对象都有实例变量的副本。 |
7 | 通过调用类名,我们可以访问这些变量。 | 我们可以直接通过在类中调用变量名来访问这些变量。 |
8 | 我们必须使用static关键字来声明这些变量。 | 我们必须在不使用静态关键字的情况下声明这些变量。 |
9 | 通过一个对象对这些变量所做的任何更改将被复制到另一个对象。 | 通过一个对象对这些变量所做的任何更改将不会复制到另一个对象。 |