猴子修补@property

2024-05-07

是否有可能对 a 的值进行猴子修补?@property我无法控制的类的实例?

class Foo:
    @property
    def bar(self):
        return here().be['dragons']

f = Foo()
print(f.bar)  # baz
f.bar = 42    # MAGIC!
print(f.bar)  # 42

显然,当尝试分配给以上内容时会产生错误f.bar. Is # MAGIC!有可能以任何方式吗?实施细则@property是一个黑匣子,不能间接进行猴子修补。整个方法调用需要替换。它只需要影响单个实例(如果不可避免,类级修补是可以的,但更改的行为必须仅选择性地影响给定实例,而不是该类的所有实例)。


子类化基类(Foo)并使用以下命令更改单个实例的类以匹配新的子类__class__属性:

>>> class Foo:
...     @property
...     def bar(self):
...         return 'Foo.bar'
...
>>> f = Foo()
>>> f.bar
'Foo.bar'
>>> class _SubFoo(Foo):
...     bar = 0
...
>>> f.__class__ = _SubFoo
>>> f.bar
0
>>> f.bar = 42
>>> f.bar
42
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猴子修补@property 的相关文章

随机推荐

  • 如何迭代视图的元素

    我有一个带有收音机 输入和按钮的视图 当我单击它时 我想检查所有输入是否包含信息 如何迭代活动中视图的元素并检查每个文本视图是否满足上述要求 谢谢 我在一些目前没有的代码中做了类似的事情 但从记忆中它应该是这样的 假设父视图 LinearL
  • 在 msAccess 中更新失败,但在 dgv C# 中更新成功

    这是我的 btnUpdate 代码 以便 msAccess 进行更新 private void btnUpdate Click object sender EventArgs e string CoString Provider Micro
  • PHP 构造函数返回 NULL

    我有这个代码 是否有可能User对象构造函数以某种方式失败 以便 this gt LoggedUser被分配了一个NULL构造函数返回后值和对象被释放吗 this gt LoggedUser NULL if SESSION verbiste
  • C# 反射和获取属性

    我有以下虚拟类结构 我试图找出如何从 PeopleList 中 People 类的每个实例获取属性 我知道如何从 People 的单个实例中获取属性 但我无法弄清楚如何从 PeopleList 中获取它 我确信这真的很简单 但有人能指出我正
  • 按字母顺序对集合进行排序

    有什么方法可以开箱即用地按字母顺序对集合进行排序 使用 C 2 0 Thanks 我们正在谈论什么样的收藏 AList
  • Android 软键盘先显示数字视图

    我的应用程序上有一个登录屏幕 它接受 CPF 作为登录名 CPF 是每个巴西公民都有的唯一号码标识 例如 10546819546 但它也可以接受护照号码作为登录名 并且上面可能有字母 我的问题是我希望键盘在弹出时在默认字母表之前显示数字 符
  • 如何解决 npm install 中的身份验证错误?

    在我的 package json 中 我有一个名为 somerepo git 的私人存储库 现在我通过 maven 在 buildserver bamboo 上运行 npm install 并收到此错误 ERROR npm ERR Comm
  • Rails 命名空间与嵌套资源

    假设我的应用程序有两个模型 Foo 和 Bar Foo 可选地属于 Bar 现在我可以查看单个 Foo 或者搜索特定的 Foo FoosController 会处理所有这些 我的网址是这样的 foos 1 and foos new 有时我想
  • php:不知从何而来的空行

    我有奇怪的错误 不知道如何解决它而不浪费太多时间 我的控制器中有一个方法 应该使用以下方法返回 xml header Content type text xml header Content Disposition attachment f
  • CQRS - 读取端的事件重播

    我读过几篇关于 CQRS 的博客 它们都解释说 在写入端 事件会持久保存在事件存储中 并且根据请求 事件将被检索并聚合重播 我的问题是为什么读取端不需要聚合事件重播 因为您的读取端不使用聚合 读取端实现为投影 它根据聚合发出的事件流计算当前
  • 设计如何覆盖 send_confirmation_instructions

    我正在尝试重写方法 send confirmation instructions 如下所示 http trackingrails com posts devise send confirmation mail manually or del
  • Serilog - RollingFile Sink 不会根据日期和大小滚动文件

    我正在使用 Serilog RollingFile Sink 但它将一天的所有数据存储在一个文件中 在我的应用程序中 一天写入 1 GB 日志 所以我想根据日期和大小滚动日志文件 如何配置 RollingFile Sink 根据日期和大小滚
  • 小于函数取消引用指针

    在某些情况下 STL 容器中有指针 并且小于比较不应通过指针进行 而应通过所指向的对象进行 一个简单的例子是一个应按实数排序的向量 目前我用以下方法解决这个问题 template
  • 将 jsonwebtoken 与 angular-cli 应用程序一起使用时出错

    我有一个 angular2 应用程序 它使用角度 cli https github com angular angular cli 20angular cli用于脚手架和其他任务 但现在我不能使用jsonwebtoken https git
  • 有向图的并查/不交集数据结构

    我正在寻找一个高效的联查 aka 不相交集 https en wikipedia org wiki Disjoint set data structure 我的数据结构有向图 https en wikipedia org wiki Dire
  • 获取符合某些条件的 Pandas DataFrame 的列和行索引对

    假设我有一只熊猫DataFrame喜欢跟随 这些值基于距离矩阵 A pd DataFrame 1 0 0 8 0 6708203932499369 0 6761234037828132 0 7302967433402214 0 8 1 0
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li
  • AES加密结果只有部分数据正确(使用mcrypt lib)

    我从以下位置下载了 AES 加密的示例代码https gist github com 2436364 https gist github com 2436364我修改了部分源代码以满足我的项目要求 如下 include
  • 如何创建服务总线触发webjob?

    我检查doc https learn microsoft com en us azure app service webjobs sdk how to service bus trigger configuration version 3x
  • 猴子修补@property

    是否有可能对 a 的值进行猴子修补 property我无法控制的类的实例 class Foo property def bar self return here be dragons f Foo print f bar baz f bar