gpt4 book ai didi

python - 在 Python 中安全地将方法从一个类绑定(bind)到另一个类

转载 作者:太空狗 更新时间:2023-10-30 00:15:59 25 4
gpt4 key购买 nike

<分区>

我知道我可以将一个函数附加到一个类并使它成为一个方法:

 >>> def is_not_bound(inst, name):
... print("Hello %s" % name)
...
>>>
>>> class NoMethods:
... pass
...
>>>
>>> setattr(NoMethods, 'bound', is_not_bound)
>>>
>>> NoMethods().bound("oz") # prints: Hello oz
Hello oz

令我惊讶的是,这也适用于从一个类到另一个类的绑定(bind)方法:

>>> class Foo:
... def foo(self, name):
... print("Hello %s" % name)
...
>>> class B:
... pass
...
>>> setattr(B, 'bound_to_b', getattr(Foo, 'foo'))
>>> B().bound_to_b("confused?")
Hello confused?
>>>

我可以安全地使用它吗?有什么我正在监督的吗?

更新

我已经发现的一个警告:

>>> B.bound_to_b
<function Foo.foo at 0x7fc997e8b730>

尽管我从 B 调用了该方法,但它似乎绑定(bind)到 Foo。

更令人惊讶的是:

>>> def new_method(self, addto):
... return self.num + addto
...
>>> setattr(B, 'add', new_method)
>>> b=B()
>>> b.num = 2
>>> b.add(2)
4

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com