为什么在 __init__ 函数中声明描述符类会破坏描述符功能?

2024-06-07

在下面的 B 类中,我想要__set__每当您赋值给 A 类中的函数时,就会调用该函数B().a。相反,将值设置为B().a覆盖B().a与价值。 C类分配给C().a工作正常,但我想为每个用户类都有一个单独的 A 实例,即我不想在 C() 的一个实例中更改“a”来更改所有其他实例中的“a”。我编写了几个测试来帮助说明问题。你能帮我定义一个同时通过 test1 和 test2 的类吗?

class A(object):
    def __set__(self, instance, value):
        print "__set__ called: ", value

class B(object):
    def __init__(self):
        self.a = A()

class C(object):
    a = A()

def test1( class_in ):
    o = class_in()
    o.a = "test"
    if isinstance(o.a, A):
        print "pass"
    else:
        print "fail"

def test2( class_in ):
    o1, o2 = class_in(), class_in()
    if o1.a is o2.a:
        print "fail"
    else:
        print "pass"

据此,文档 http://docs.python.org/reference/datamodel.html#implementing-descriptors:

以下方法只适用当类的实例包含 方法(所谓的描述符 班级)出现在班级词典中 另一个新式班级, 作为。。而被知道 所有者阶层。在示例中 下面,“属性”指的是 名称为键的属性 所有者阶层的财产”__dict__。 描述符只能实现为 新式课程本身。

所以你不能在实例上有描述符。

但是,由于描述符获取对用于访问它的实例的引用,因此只需将其用作存储状态的键,您就可以根据实例具有不同的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 __init__ 函数中声明描述符类会破坏描述符功能? 的相关文章

随机推荐

  • 什么会导致 PHP 变量被服务器重写?

    我的公司给了我一个虚拟机来安装网络软件 但我遇到了一个相当奇怪的问题 如果 PHP 变量与特定模式匹配 服务器就会覆盖 重写 它们 什么可以像这样重写 PHP 变量 以下是一个完整的独立脚本
  • Rails:控制文件存储缓存大小

    Rails 中基于文件的缓存的文档说 请注意 缓存将不断增长 直到磁盘已满 除非您 定期清除旧条目 不幸的是 它没有提供任何有关如何定期清除旧条目的信息 是否设置合适的值 expires in完成这项工作还是清除缓存背后还有其他某种黑魔法
  • Set-Cookie 在 Chrome 中不起作用

    我有一个奇怪的问题 我开发的网站之一在请求登录页面时返回防伪 cookie 当我检查 chrome 网络选项卡中的响应时 它包含标头 Set Cookie AspNetCore Antiforgery w5W7x28NAIs xxx pat
  • WordPress:如何使用“wp_query”类搜索“post_content”帖子?

    正如标题所暗示的 我试图通过其找到一个帖子post content 我该怎么做 谢谢 例子 SELECT FROM DBname WHERE post content LIKE phrase 或者 因为它是有问题的 您可以通过实际使用 WP
  • 尽管 HQL 获取,Nhibernate 仍然生成代理

    我有以下 HQL 语句 select distinct t from TaskEntity as inner join fetch t Case as c inner join fetch c Client as client inner
  • MongoDB:如何在更新之前对查询进行排序

    我正在编写一个 Meteor Node js 应用程序 它在后端使用 MongoDB 在我的代码中的某个时刻 我需要更新specific集合中的文档 我需要使用 Mongo 的 update 方法 但我在传递正确的 复杂的 查询以缩小到该特
  • 如何跨工作区保存 E​​clipse 启动配置文件?

    当我复制 Eclipse 项目目录时 它包含 classpath 和 project 文件 这样当我将同一目录带到另一个 Eclipse 实例时 我不必设置我的构建路径等 假设所有资源都包含在在项目中 而不是外部 但是 此过程不会导致启动配
  • 在全局范围内查找 JavaScript 函数

    有没有办法在当前活动的对象模型中搜索 JavaScript 属性 例如命名函数 Firebug 在 DOM 选项卡上显示的内容 我在 Chrome 开发人员工具中找不到直接等效项 加载页面 使用主要浏览器的通用开发人员工具 一个例子是 我搜
  • Windows 窗体和 XNA - 绘制不是实时的

    我目前正在为 XNA 开发一个关卡编辑器 它是通过结合 Windows 窗体和 XNA 构建的 我正在使用 App Hub 上示例中的内容链接文本 http create msdn com en US education catalog s
  • Gitlab-CI:有条件的allow_failure

    我最近开始为我的代码实现自动测试 我注意到 CI 没有捕获编译器的警告 即使有警告 测试也显示为成功 我最初为编译器添加了一个标志 将警告转化为错误allow failure True 但问题是编译器在第一个警告 gt 错误时停止 并没有完
  • 具有该名称的查询已存在

    所以我想使用 Excel VBA 创建雅虎财经历史数据 csv 下载 的自动查询 我设置了一个函数 以便 Excel 会自动查询股票代码及其开始日期和结束日期 分别为 K1 K2 K3 这是代码 Sub YFIN get YFIN get
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • 如何在每次运行 python 程序时添加新列

    我希望我的表的第一列作为卷号 第二列作为名称 每当我运行 python 程序时 我想在表中添加一列日期 在这个新列中 我想填充从 user list 获得的列表将包含值 P A P P 等 如何处理 我尝试首先通过 alter 命令添加一列
  • Android 视图可见性消失

    如果我设置了一个视图可见性 它被夸大了 消失了 它会加快我的 UI 速度吗 它将加快 UI 的实际绘制速度 因为 好吧 您不必再绘制它 但它仍然会膨胀 并且膨胀过程不会更快
  • 如何使用 sed 交换两行?

    有谁知道如何更换line a with line b and line b with line a使用 sed 编辑器在文本文件中 我可以看到如何用保留空间中的一行替换模式空间中的一行 即 Paco x or Paco g 但是如果我想采取
  • 如何在 Scala 中使用 Circe 解码 JSON 列表/数组

    我有代码片段 cursor downField params downField playlist downField items as List Clip 其中 Clip 是字符串和数字的简单 case 类 传入的 Json 应包含一个
  • SFTP文件同时上传和下载

    cronjob 每 3 小时运行一次 使用 SFTP 下载文件 调度程序是用Perl编写的 使用的模块是Net SFTP Foreign Can the Net SFTP Foreign下载仅使用 SFTP 部分上传的文件 如果是这样 我们
  • 在 Postman 中解析对另一个请求的 XML 响应

    我必须测试一些以 XML 格式响应的 Web 服务 并且我想解析从第一个请求到第二个请求调用的响应 Ex 我提出第一个请求
  • RichFaces动态TabPanel

    如何实现简单的添加 删除动态
  • 为什么在 __init__ 函数中声明描述符类会破坏描述符功能?

    在下面的 B 类中 我想要 set 每当您赋值给 A 类中的函数时 就会调用该函数B a 相反 将值设置为B a覆盖B a与价值 C类分配给C a工作正常 但我想为每个用户类都有一个单独的 A 实例 即我不想在 C 的一个实例中更改 a 来