介绍
面向对象编程允许在类级别或实例级别使用变量。 Variables 本质上是代表您在程序中使用的值的符号。
在类级别,变量称为类变量,而在实例级别的变量称为实例变量。
当我们期望变量在实例之间保持一致时,或者当我们想要初始化一个变量时,我们可以在类级别定义该变量。 当我们预计变量将在实例之间发生显着变化时,我们可以在实例级别定义它们。
软件开发的原则之一是DRY原则,代表don't repeat yourself。 该原则旨在限制代码中的重复,面向对象编程遵循 DRY 原则,因为它减少了冗余。
本教程将演示在 Python 中的面向对象编程中类和实例变量的使用。
先决条件
您应该在您的计算机或服务器上安装 Python 3 并设置编程环境。 如果您没有设置编程环境,您可以参考本地编程环境或服务器上的编程环境适合您的操作的安装和设置指南系统(Ubuntu、CentOS、Debian 等)
类变量
类变量在 类构造 中定义。 因为它们归类本身所有,所以类变量由类的所有实例共享。 因此,除非您使用类变量来初始化变量,否则它们通常对于每个实例都具有相同的值。
在所有方法之外定义的类变量,按照惯例,通常放置在类头的正下方和 构造函数方法 和其他方法之前。
Info: 要跟随本教程中的示例代码,请通过运行 python3 命令在本地系统上打开 Python 交互式 shell。 然后,您可以通过在 >>> 提示符后添加示例来复制、粘贴或编辑示例。
单独的类变量如下所示:
class Shark:
animal_type = "fish"
在这里,变量 animal_type 被赋值为 "fish"。
我们可以创建一个 Shark 类的实例(我们称之为 new_shark)并使用点符号打印变量:
鲨鱼.py
class Shark:
animal_type = "fish"
new_shark = Shark()
print(new_shark.animal_type)
让我们运行程序:
python shark.py
Outputfish
我们的程序返回变量的值。
让我们添加更多的类变量并将它们打印出来:
鲨鱼.py
class Shark:
animal_type = "fish"
location = "ocean"
followers = 5
new_shark = Shark()
print(new_shark.animal_type)
print(new_shark.location)
print(new_shark.followers)
就像任何其他变量一样,类变量可以由 Python 中可用的任何 数据类型 组成。 在这个程序中,我们有字符串和整数。 让我们使用 python shark.py 命令再次运行程序并查看输出:
Outputfish ocean 5
new_shark 的实例能够访问所有类变量并在我们运行程序时将它们打印出来。
类变量允许我们在构造类时定义变量。 然后,类的每个实例都可以访问这些变量及其相关值。
实例变量
实例变量由类的实例拥有。 这意味着对于一个类的每个对象或实例,实例变量是不同的。
与类变量不同,实例变量是在方法中定义的。
在下面的 Shark 类示例中,name 和 age 是实例变量:
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
当我们创建一个 Shark 对象时,我们必须定义这些变量,这些变量在构造函数方法或其他方法中作为参数传递。
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
new_shark = Shark("Sammy", 5)
与类变量一样,我们可以类似地调用打印实例变量:
鲨鱼.py
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
new_shark = Shark("Sammy", 5)
print(new_shark.name)
print(new_shark.age)
当我们使用 python shark.py 运行上面的程序时,我们将收到以下输出:
OutputSammy 5
我们收到的输出由我们为 new_shark 的对象实例初始化的变量的值组成。
让我们创建另一个名为 stevie 的 Shark 类对象:
鲨鱼.py
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
new_shark = Shark("Sammy", 5)
print(new_shark.name)
print(new_shark.age)
stevie = Shark("Stevie", 8)
print(stevie.name)
print(stevie.age)
OutputSammy 5 Stevie 8
stevie 对象,如 new_shark 对象,传递特定于 Shark 类实例的参数以将值分配给实例变量。
由类的对象拥有的实例变量允许每个对象或实例具有分配给这些变量的不同值。
一起使用类和实例变量
类变量和实例变量经常会同时使用,所以让我们看一个使用我们创建的 Shark 类的例子。 程序中的注释概述了该过程的每个步骤。
鲨鱼.py
class Shark:
# Class variables
animal_type = "fish"
location = "ocean"
# Constructor method with instance variables name and age
def __init__(self, name, age):
self.name = name
self.age = age
# Method with instance variable followers
def set_followers(self, followers):
print("This user has " + str(followers) + " followers")
def main():
# First object, set up instance variables of constructor method
sammy = Shark("Sammy", 5)
# Print out instance variable name
print(sammy.name)
# Print out class variable location
print(sammy.location)
# Second object
stevie = Shark("Stevie", 8)
# Print out instance variable name
print(stevie.name)
# Use set_followers method and pass followers instance variable
stevie.set_followers(77)
# Print out class variable animal_type
print(stevie.animal_type)
if __name__ == "__main__":
main()
当我们使用 python shark.py 运行程序时,我们将收到以下输出:
OutputSammy ocean Stevie This user has 77 followers fish
在这里,我们在 Shark 类的两个对象 sammy 和 stevie 中使用了类变量和实例变量。
结论
在面向对象编程中,类级别的变量称为类变量,而对象级别的变量称为实例变量。
这种区分允许我们使用类变量来初始化具有分配给变量的特定值的对象,并为每个具有实例变量的对象使用不同的变量。
利用类和实例特定的变量可以确保我们的代码遵循 DRY 原则,以减少代码中的重复。