在 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
类变量name
和salary
实例变量。
类变量由所有实例共享,可以直接在类上访问,例如
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