首页 > 试题广场 >

运行以下Python代码,将会打印出什么? class De

[单选题]
运行以下Python代码,将会打印出什么?
class Descriptor:
    def __get__(self, instance, owner):
        if instance is None:
            return f"Access from class {owner.__name__}"
        return f"Access from instance of {owner.__name__}"
class MyClass:
    attr = Descriptor()
instance = MyClass()
print(instance.attr)
print(MyClass.attr)
  • Access from instance of MyClass
    Access from class MyClass
  • Access from instance of MyClass
    Access from instance of MyClass
  • Access from class MyClass
    Access from class MyClass
  • 代码会抛出 TypeError,因为 `__get__` 的参数不匹配。
要理解这道题,需要掌握**Python描述符(Descriptor)**的工作机制,特别是 __get__ 方法的行为: 步骤1:理解描述符的 __get__ 方法 在Python中,描述符是实现了 __get__ 、 __set__ 或 __delete__ 方法的对象。当我们访问一个对象的属性时,若该属性是描述符,就会触发对应的方法。 对于 __get__(self, instance, owner) 方法: -  instance :如果是通过实例访问属性, instance 是该实例对象;如果是通过类访问属性, instance 是 None 。 -  owner :始终是属性所属的类(这里是 MyClass )。 步骤2:分析两次打印的逻辑 - 第一次打印: print(instance.attr)   instance 是 MyClass 的实例,所以访问 instance.attr 时, __get__ 方法的 instance 参数不为 None ,会执行 return f"Access from instance of {owner.__name__}" ,即返回 "Access from instance of MyClass" 。 - 第二次打印: print(MyClass.attr)  直接通过类 MyClass 访问属性 attr ,此时 __get__ 方法的 instance 参数为 None ,会执行 return f"Access from class {owner.__name__}" ,即返回 "Access from class MyClass" 。 步骤3:匹配选项 两次打印的结果分别是 "Access from instance of MyClass" 和 "Access from class MyClass" ,与选项A完全一致。 因此,这道题的正确答案是A。
发表于 今天 17:17:03 回复(0)