面试题答案
一键面试属性描述符概念
在Python中,属性描述符是实现了特定协议(__get__
、__set__
、__delete__
方法中的一个或多个)的类。它允许我们对类属性的访问进行更细粒度的控制,比如在获取、设置或删除属性时执行自定义代码。
简单属性描述符类示例
class MyDescriptor:
def __init__(self, initial_value=None):
self.value = initial_value
def __get__(self, instance, owner):
print(f"获取属性值: {self.value}")
return self.value
def __set__(self, instance, value):
if not isinstance(value, int):
raise ValueError("属性值必须是整数")
print(f"设置属性值为: {value}")
self.value = value
class MyClass:
my_attr = MyDescriptor(10)
obj = MyClass()
print(obj.my_attr)
obj.my_attr = 20
try:
obj.my_attr = "not an integer"
except ValueError as e:
print(f"错误: {e}")
在上述代码中,MyDescriptor
类是一个属性描述符类,实现了 __get__
和 __set__
方法。MyClass
类使用 MyDescriptor
实例作为类属性 my_attr
。这样,当访问或设置 my_attr
时,会调用描述符类中的相应方法,从而实现对属性访问的控制。