介绍
面向对象编程允许在类级别或实例级使用变量 。 变量本质上是在程序中使用的值的符号。
在类级别,变量被称为类变量 ,而实例级别的变量称为实例变量 。
当我们期望变量在实例之间是一致的,或者当我们想要初始化变量时,我们可以在类级别定义该变量。 当我们预期变量将在实例之间显着变化时,我们可以在实例级定义它们。
软件开发的其中一个原则是DRY原则,代表不要重复 。 该原则旨在限制代码中的重复,面向对象的编程遵循DRY原则,因为它减少冗余。
本教程将演示在Python中的面向对象编程中使用类和实例变量。
类变量
类变量在类构造中定义。 因为它们由类本身拥有,类变量由类的所有实例共享。 因此,除非您使用类变量来初始化变量,否则它们通常对每个实例都具有相同的值。
在所有方法之外定义,类varialbles通常被放置在类头的正下方,在构造方法和其他方法之前。
单独的类变量如下所示:
class Shark:
animal_type = "fish"
这里,变量animal_type
被赋值为"fish"
。
我们可以创建一个Shark
类的实例(我们称之为new_shark
),并使用点表示法打印变量:
class Shark:
animal_type = "fish"
new_shark = Shark()
print(new_shark.animal_type)
我们来运行这个程序:
python shark.py
Outputfish
我们的程序返回变量的值。
我们再添加一些类变量并打印出来:
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)
与类变量一样,我们可以类似地调用打印实例变量:
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的对象实例new_shark
。
我们来创建一个名为stevie
的Shark
类的另一个对象:
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)
stevie
对象,如new_shark
对象传递特定于Shark
类的实例的参数,以将值分配给实例变量。
由类的对象所拥有的实例变量允许每个对象或实例具有分配给这些变量的不同值。
一起使用类和实例变量
类变量和实例变量通常会被同时使用,所以让我们来看一个使用我们创建的Shark
类的例子。 程序中的注释概述了流程的每个步骤。
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原则,以减少代码中的重复。