您的位置:

类变量和实例之间的区别

Python 中的变量

面向对象编程允许开发人员在类级别或实例级别使用变量。变量是代表我们在程序中使用的值的必要符号。

类级别的变量称为类变量,而实例级别的变量称为实例变量。

每当我们期望变量在实例之间保持一致时,或者每当我们必须初始化一个变量时,就可以在类级别定义该变量。每当我们期待那些将在实例间发生显著变化的变量时,就可以在实例级定义该变量。

软件开发的各种原则中有 DRY 原则,缩写为不要重复自己。这一原则侧重于代码中的限制性复制,面向对象编程遵循 DRY 原则,因为它减少了冗余。

在接下来的教程中,我们将了解在 Python 编程语言中面向对象编程中的类以及实例变量。我们还将讨论这两个变量之间的根本区别。

所以,让我们开始吧。

理解类变量

类变量在类的构造中声明。由于这些变量归类本身所有,因此它们由所有类实例共享。因此,它们通常对每个实例都有相同的值,除非我们利用类变量来初始化变量。

按照惯例,类变量是在所有方法之外定义的,通常放在头类的正下方,构造器和其他函数的方法之前。

让我们考虑以下类变量的语法。

语法:


# defining the class
class Class_name:
    # declaring the variable in the class
    var = "xyz"

在上面的代码片段中,“ var ”变量被赋予了“ xyz 值。

我们可以定义类名类的一个对象(我们称之为“ 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

说明:

在上面的代码片段中,我们定义了一个学生类,并将一些变量定义为 id、名称和年龄,作为构造器方法中的参数传递。然后,我们实例化了这个类,并为用户打印了实例变量的值。

因此,我们将获得为数据库实例初始化的变量的值。

类对象拥有的实例变量使开发人员能够在分配给这些变量的每个实例中存储不同的值。

理解类变量和实例变量之间的区别

既然我们已经理解了变量的基本概念以及这些变量在类中的使用方式,那么让我们理解类变量与实例变量的不同之处。这两个变量之间的主要区别如下表所示:

| 南号码 | 类变量 | 实例变量 | | one | 类变量是定义类的特定属性的变量。 | 实例变量是一个变量,其值被指定给实例并在不同的实例之间共享。 | | Two | 我们可以在类及其子类之间共享这些变量。 | 我们不能在类之间共享这些变量。然而,它们只适合特定的类别。 | | three | 它通常支持类的每个实例都有一个共享值,即使类中没有实例对象。 | 它通常为类所需的数据存储内存。 | | four | 它通常是在我们开始执行程序时定义的。 | 它通常是在我们创建类的实例时定义的。 | | five | 它通常会重新收集这些值,直到程序结束。 | 只要对象存在,它通常就会重新收集值。 | | six | 它只有一个类变量的副本,所以它在不同的类对象之间共享。 | 它有多个副本,因此每个对象都有其实例变量的副本。 | | seven | 我们可以通过用类名调用来访问这些变量。 | 我们可以通过在类中调用变量名来直接访问这些变量。 | | eight | 我们必须借助静态键盘来声明这些变量。 | 我们必须在不使用 static 关键字的情况下声明这些变量。 | | nine | 我们通过一个对象对这些变量所做的任何更改都将被复制到另一个对象中。 | 我们通过一个对象对这些变量所做的任何更改都不会在另一个对象中复制。 |