python重写get方法
时间: 2024-09-03 19:04:36 浏览: 49
在Python中,`__get__()`是一个特殊方法(魔术方法),它允许你在访问类属性时自定义行为。当一个实例的属性名作为引用操作符(`.`)左边的对象时,Python会查找该属性所在的类的元类(metaclass)中的`__get__`方法。
这个方法通常用于创建描述符(Descriptor),比如只读属性、计算属性或者动态绑定。例如,如果你有一个私有变量`_value`,你可以重写`__get__`方法来获取它的值:
```python
class GetterDescriptor:
def __init__(self, default):
self._default = default
def __get__(self, instance, owner):
if instance is None:
return self # 返回描述符本身,用于访问类属性时
else:
return instance._value or self._default # 实例存在则返回其值,否则返回默认值
# 使用示例
class MyClass:
value = GetterDescriptor(0)
my_instance = MyClass()
print(my_instance.value) # 输出默认值,因为此时_value未设置
my_instance._value = 42
print(my_instance.value) # 输出42,因为现在访问到了实例的_value
```
在这个例子中,当我们通过`my_instance.value`来访问属性时,实际上是调用了`GetterDescriptor`的`__get__`方法,实现了对`_value`的定制访问逻辑。
阅读全文