python类变量和实例变量

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. 总结

在面向对象编程中,类变量和实例变量是非常有用的工具。类变量是与类相关联的变量,所有对象都可以访问它们。实例变量是与特定对象相关联的变量,并且不同的对象可以拥有不同的值。类变量和实例变量在不同的情况下更具有用的使用场景,要根据情况选择使用变量类型,才能更好地利用它们的优势。

后端开发标签