1. 什么是python类变量和实例变量
在面向对象编程(OOP)中,类是面向对象的基本概念之一,它是用于定义对象属性和方法的蓝图或模板,它指定了在程序中创建对象时需要采取的操作。类变量是与类相关联的变量,它们在所有对象之间共享。相反,实例变量是与特定对象相关联的变量,通常由类中定义的构造函数或方法设置。
class MyClass:
classVar = 1
def __init__(self, instanceVar):
self.instanceVar = instanceVar
myObj1 = MyClass(10)
myObj2 = MyClass(20)
print(myObj1.classVar) # 1
print(myObj2.classVar) # 1
print(myObj1.instanceVar) # 10
print(myObj2.instanceVar) # 20
1.1 Python类变量
Python类变量是定义在一个类中并在整个类中可用的变量。
class MyClass:
classVar = 10
def __init__(self):
pass
print(MyClass.classVar) # 10
在这个例子中,我们定义了一个名为classVar的变量,并将其设置为10。要访问关联的类变量,我们使用类名称作为前缀,就像在上面的代码中一样,使用MyClass.classVar来访问类变量。
1.2 Python实例变量
Python实例变量是按照每个类实例访问的变量
class MyClass:
def __init__(self, instanceVar):
self.instanceVar = instanceVar
myObj = MyClass(10)
print(myObj.instanceVar) # 10
在这个例子中,我们定义了一个名为instanceVar的变量,它是一个实例变量。在我们定义类的构造函数时,我们需要使实例变量成为对象的属性。在MyClass中,我们定义了一个构造函数,它接受一个参数,并将其分配给实例变量instanceVar。要在对象中访问实例变量,我们使用对象名称myObj和实例变量名称instanceVar之间的句点表示法。
2. 类变量和实例变量使用场景
2.1 Python类变量使用场景
Python类变量可以用于存储与类相关的信息。
class Circle:
pi = 3.14159
def __init__(self, radius):
self.radius = radius
def calculateArea(self):
return self.radius ** 2 * Circle.pi
circle1 = Circle(5)
circle2 = Circle(10)
print(circle1.calculateArea()) # 78.53975
print(circle2.calculateArea()) # 314.159
在这个例子中,我们定义了一个名为Circle的类,并指定了pi作为类变量。我们还定义了一个名为calculateArea的方法,它需要类的实例的半径,并返回圆形的面积。在计算面积时,我们可以使用Circle.pi,因为它是与类相关联的常量。
2.2 Python实例变量使用场景
Python实例变量可以用于存储与特定对象相关的信息。
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def age(self, current_year):
return current_year - self.year
car1 = Car("Toyota", "Corolla", 2015)
car2 = Car("Honda", "Civic", 2018)
print(car1.age(2021)) # 6
print(car2.age(2021)) # 3
在这个例子中,我们定义了一个名为Car的类,并指定了make,model和year作为实例变量。我们还定义了一个名为age的方法,它需要类的实例的当前年份,并根据年份来计算车的年龄。在这里,我们使用实例变量self.year,因为该属性与实例相关。
3. 总结
在面向对象编程中,类变量和实例变量是非常有用的工具。类变量是与类相关联的变量,所有对象都可以访问它们。实例变量是与特定对象相关联的变量,并且不同的对象可以拥有不同的值。类变量和实例变量在不同的情况下更具有用的使用场景,要根据情况选择使用变量类型,才能更好地利用它们的优势。