python类变量和对象变量同名
时间: 2024-09-13 22:08:45 浏览: 14
在Python中,类变量和对象变量可以同名,但它们的作用域和存储位置是不同的。类变量是属于类的,也就是该类的所有实例共享同一个变量;而对象变量是属于对象实例的,每个实例都有自己的变量副本。
当同名的类变量和对象变量存在时,如果通过类直接访问该变量,将会访问到类变量。如果通过实例访问,将会访问到对象变量。如果对象变量不存在,那么会回退到类变量。
这种情况下,对象变量可以看作是对类变量的一种覆盖,即对象变量具有更高的优先级。下面是一个示例代码:
```python
class MyClass:
class_var = '这是类变量'
def __init__(self, name):
self.object_var = name # 对象变量
# 通过类名访问
print(MyClass.class_var) # 输出 '这是类变量'
# 通过实例访问
my_instance = MyClass('这是对象变量')
print(my_instance.object_var) # 输出 '这是对象变量'
print(my_instance.class_var) # 输出 '这是类变量'
# 修改类变量
MyClass.class_var = '类变量被修改'
print(MyClass.class_var) # 输出 '类变量被修改'
print(my_instance.class_var) # 输出 '类变量被修改'
# 修改对象变量
my_instance.class_var = '通过实例修改类变量'
print(MyClass.class_var) # 输出 '通过实例修改类变量'
print(my_instance.class_var) # 输出 '通过实例修改类变量'
# 此时访问另一个实例的class_var
another_instance = MyClass('新的实例')
print(another_instance.class_var) # 输出 '通过实例修改类变量'
```