首页 > 试题广场 >

以下代码通过描述符协议实现了一个属性验证器。当 `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__` 方法中进行赋值。
这题不会做
发表于 2025-12-05 16:05:35 回复(0)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[10], line 14
     12     def __init__(self, value):
     13         self.value = value
---> 14 d = Data(-10)
     15 print (d.value)

Cell In[10], line 13, in Data.__init__(self, value)
     12 def __init__(self, value):
---> 13     self.value = value

Cell In[10], line 8, in NonNegative.__set__(self, instance, value)
      6 def __set__(self, instance, value):
      7     if value < 0:
----> 8         raise ValueError("Negative value not allowed")
      9     setattr(instance, self.private_name, value)

ValueError: Negative value not allowed 
编辑于 2026-01-28 10:35:08 回复(1)