首页 > 试题广场 >

以下代码通过描述符协议实现了一个属性验证器。当 `d.val

[单选题]
以下代码通过描述符协议实现了一个属性验证器。当 `d.value = -10` 这行代码被执行时,程序会发生什么?
class NonNegative:
    def __set_name__(self, owner, name):
        self.private_name = '_' + name
    def __get__(self, instance, owner):
        return getattr(instance, self.private_name)
    def __set__(self, instance, value):
        if value < 0:
            raise ValueError("Negative value not allowed")
        setattr(instance, self.private_name, value)
class Data:
    value = NonNegative()
    def __init__(self, value):
        self.value = value
d = Data(10)
  • 程序正常执行,`d.value` 的值将被更新为 -10。
  • 程序将抛出 AttributeError,因为 `private_name` 是一个局部变量。
  • 程序将抛出 ValueError,因为描述符的 `__set__` 方法中的检查逻辑被触发。
  • 程序将抛出 TypeError,因为描述符不能在 `__init__` 方法中进行赋值。
这题不会做
发表于 今天 16:05:35 回复(0)