在 Python 中更新类变量

在 Python 中更新类变量

Updating class variables in Python

通过直接在类上访问它们来更新实例变量,例如
Employee.cls_variable = new_value. 类变量由所有实例共享,可以直接在类或类方法中更新。

主程序
class Employee(): # 👇️ class variable cls_id = 'employee' def __init__(self, name, salary): # 👇️ instance variables self.name = name self.salary = salary # ✅ update class variable @classmethod def set_cls_id(cls, new_cls_id): cls.cls_id = new_cls_id return cls.cls_id # ✅ update instance variable def set_name(self, new_name): self.name = new_name return new_name print(Employee.cls_id) # 👉️ employee Employee.set_cls_id('new_employee_id') print(Employee.cls_id) # 👉️ new_employee_id bob = Employee('Bobbyhadz', 100) bob.set_name('Bobbyhadz2') print(bob.name) # 👉️ Bobbyhadz2

该类具有cls_id类变量namesalary实例变量。

类变量由所有实例共享,可以直接在类上访问,例如Employee.cls_id.

实例变量对于您通过实例化类创建的每个实例都是唯一的。

我们使用类方法来更新cls_id变量。

主程序
@classmethod def set_cls_id(cls, new_cls_id): cls.cls_id = new_cls_id return cls.cls_id

类方法作为第一个参数传递给类。

请注意,您也可以直接在类上设置类变量,例如
Employee.cls_id = new_cls_id.

主程序
class Employee(): # 👇️ class variable cls_id = 'employee' def __init__(self, name, salary): # 👇️ instance variables self.name = name self.salary = salary print(Employee.cls_id) # 👉️ employee # ✅ update class variable Employee.cls_id = 'new_employee_id' print(Employee.cls_id) # 👉️ new_employee_id

类变量由类的所有实例共享,而实例变量对于每个实例都是唯一的。

您将需要更频繁地更新类中的实例变量。这是一个例子。
主程序
class Employee(): # 👇️ class variable cls_id = 'employee' def __init__(self, name, salary): # 👇️ instance variables self.name = name self.salary = salary # ✅ update instance variable def set_name(self, new_name): self.name = new_name return new_name alice = Employee('Alice', 150) bob = Employee('Bobbyhadz', 100) bob.set_name('Bobbyhadz2') print(bob.name) # 👉️ Bobbyhadz2 print(alice.name) # 👉️ Alice

更新一个实例变量不会更新其他实例的属性。

另一方面,当您更新类变量时,所有实例的值都会更新。

主程序
class Employee(): # 👇️ class variable cls_id = 'employee' def __init__(self, name, salary): # 👇️ instance variables self.name = name self.salary = salary alice = Employee('Alice', 150) bob = Employee('Bobbyhadz', 100) print(bob.cls_id) # 👉️ employee Employee.cls_id = 'NEW_ID' print(alice.cls_id) # 👉️ NEW_ID print(bob.cls_id) # 👉️ NEW_ID

更新cls_id类变量会反映在所有实例中。

如果需要从类的实例访问类变量,则可以使用type()该类。
主程序
class Employee(): cls_id = 'employee' def __init__(self, name, salary): self.name = name self.salary = salary bob = Employee('Bobbyhadz', 100) # 👇️ override class variable on the instance bob.cls_id = 'new' print(bob.cls_id) # 👉️ new # 👇️ access the actual class variable from the instance result = type(bob).cls_id print(result) # 👉️ employee

实例覆盖cls_id变量,所以要访问实际的类变量,我们必须使用type()类。

类型类返回对象的类型

最常见的返回值与访问对象的属性相同。 __class__

以下代码片段使用该__class__属性并获得相同的结果。

主程序
bob = Employee('Bobbyhadz', 100) bob.cls_id = 'new' print(bob.cls_id) # 👉️ new result = bob.__class__.cls_id print(result) # 👉️ employee

发表评论