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

Python自定义类dir()结果中__weakref__属性来源问题

Python自定义类中__weakref__属性的来源

首先纠正一个认知偏差:object作为所有Python类的基类,其本身的实例不支持弱引用,因此直接执行dir(object)看不到__weakref__是正常现象,这个属性不是从父类继承而来。

当你使用class My:这种语法定义没有显式声明__slots__的普通自定义类时,Python解释器在类创建阶段会自动为新类注入两个特殊的描述符属性:

  • __dict__:为类实例提供存储自定义属性的字典入口
  • __weakref__:为类实例提供弱引用支持的内部存储槽位,是weakref模块实现弱引用机制必需的绑定入口

你可以通过简单的代码验证这个逻辑:如果给类显式定义__slots__且不将__weakref__纳入slot列表,类就不会自动注入这个属性,实例也无法被弱引用:

import weakref

# 带__slots__且不含__weakref__的类
class MyWithSlots:
    __slots__ = ()

print('__weakref__' in dir(MyWithSlots))  # 输出False

try:
    obj = MyWithSlots()
    weakref.ref(obj)
except TypeError as err:
    print(err)  # 输出:cannot create weak reference to 'MyWithSlots' object

补充说明:__weakref__不是普通的可调用实例方法,是解释器层面实现的描述符对象,日常业务开发基本不需要直接操作这个属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:24:16