You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中__get__方法触发场景及property实例调用__get__的实现方法

手动触发描述符__get__方法的方式

描述符的__get__方法默认是Python解释器在访问绑定为类属性的描述符实例时,通过类的__getattribute__逻辑自动调用的,调用时会自动传入所属实例、所属类两个参数。如果你不想把描述符绑定到类上就触发方法,直接显式调用__get__并传入对应参数即可:

def get_five(*args):
    return 5

five = property(get_five)
# 显式调用__get__,第一个参数为绑定的实例(无绑定可传None),第二个参数为所属类(可选)
print(five.__get__(None)) # 输出5
附加问题解答

你的代码不会输出5的核心原因是:描述符协议仅对绑定为类属性的描述符实例生效。
你把property实例赋值给了self.b,也就是存到了实例自身的__dict__属性字典中。Python的属性查找逻辑中,实例自身__dict__里的属性优先级是高于描述符逻辑的,访问a.b时会直接返回实例字典里存的property对象本身,不会触发它的__get__方法,自然不会执行getter逻辑输出5。
如果要让property生效,必须把它定义为类属性:

class A:
    def setter(*args):
        print("setter")
    def getter(*args):
        print("getter")
        return 5
    # 放在类层级作为类属性
    b = property(getter, setter)

a = A()
a.b # 会输出getter,返回5

内容的提问来源于stack exchange,提问作者Joe Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:09:03