c语言编程笔录

首页 >   > 笔记大全

笔记大全

Python类属性的定义和应用

更新时间:2023-09-10

Python类属性定义

在 Python 中,类属性是指与类相关联的属性,而不是与实例相关联的属性。它们通常用于在类之间共享共同状态,但也可以用于实例间共享信息。类属性定义在类内部,但在所有实例之外。这意味着,它们对所有该类的实例都是相同的。


class MyClass:
    class_attr = 42

print(MyClass.class_attr) # output: 42

从上面的代码示例中可以看出,我们定义了一个名为 MyClass 的类,并将类属性 class_attr 的值设置为 42。此时,我们可以使用类名 MyClass 来访问类属性 class_attr。

Python类属性应用

类属性可用于许多情况,例如:在类之间共享基础状态,存储所有实例可访问的常量或变量,以及跟踪所有创建的实例数。


class Car:
    car_count = 0
    
    def __init__(self, name):
        self.name = name
        Car.car_count += 1

car1 = Car("Audi")
car2 = Car("BMW")

print(Car.car_count) # output: 2

从上面的代码示例中可以看出,我们定义了一个名为 Car 的类,并将类属性 car_count 初始化为 0。每当我们创建一个新的 Car 实例时,我们就会增加 Car.car_count 的值。

类属性还可用于存储所有实例的常量或变量。在下面的示例中,我们创建了一个名为 Circle 的类,并使用类属性 PI 来存储数学常量 PI 的值。


class Circle:
    PI = 3.141592653589793
    
    def __init__(self, r):
        self.radius = r

    def get_area(self):
        return Circle.PI * self.radius ** 2

circle = Circle(5)
print(circle.get_area()) # output: 78.53981633974483

从上面的代码示例中可以看出,我们定义了一个名为 Circle 的类,并使用类属性 PI 存储数学常量 PI 的值。我们在 get_area() 方法中使用 Circle.PI 计算圆的面积。

Python类属性和实例属性的区别

在 Python 中,类属性与实例属性有相同的名称。当类属性与实例属性具有相同的名称时,实例属性的值将覆盖类属性的值。


class MyClass:
    class_attr = 42

    def __init__(self):
        self.instance_attr = 99

obj1 = MyClass()
obj2 = MyClass()

print(obj1.class_attr) # output: 42
print(obj2.class_attr) # output: 42

obj1.class_attr = 24

print(obj1.class_attr) # output: 24
print(obj2.class_attr) # output: 42

从上面的代码示例中可以看出,我们定义了一个名为 MyClass 的类,并设置了类属性 class_attr 和实例属性 instance_attr 的值。在 obj1 实例上设置 class_attr 的值不会影响 obj2 实例或 MyClass 类上的值。

当你需要将某个属性与单个实例相关联时,请使用实例属性。当你需要将属性与整个类相关联时,请使用类属性。

Python 类属性的修改

类属性可在类定义外部进行修改,也可以在类方法中进行修改。我们可以通过以下方式修改类属性。


class MyClass:
    class_attr = 42

print(MyClass.class_attr) # output: 42

MyClass.class_attr = 24

print(MyClass.class_attr) # output: 24

在某些情况下,可能需要在类方法中修改类属性。在这种情况下,我们需要使用 cls 关键字来访问类属性。


class MyClass:
    class_attr = 42

    @classmethod
    def modify_class_attr(cls, value):
        cls.class_attr = value

print(MyClass.class_attr) # output: 42

MyClass.modify_class_attr(24)

print(MyClass.class_attr) # output: 24

从上面的代码示例中可以看出,我们定义了一个名为 MyClass 的类,并设置了类属性 class_attr 的值为 42。我们还定义了一个名为 modify_class_attr 的类方法,并在其中使用 cls.class_attr 修改了类属性的值。