gpt4 book ai didi

python - Monkey 补丁可以替换类中现有的函数定义吗?

转载 作者:行者123 更新时间:2023-11-28 22:29:51 39 4
gpt4 key购买 nike

我知道 SO 社区有多激烈,所以我会尽力保留问题 minimal, complete and verifiable .

我只是想知道猴子补丁是否可以用来替换现有函数的定义?

例如:

class A():

def foo():
print '2'

def foo():
print '5'

A.foo = foo

这种方式似乎也不起作用,为什么我不只是添加一个新函数而不是替换现有函数,我在其他类中调用这些函数,据我所知,猴子修补将这些函数添加到运行时,我需要我的 python 代码在 Apache spark 服务器上运行,这会抛出一个错误,认为对该函数的调用未被引用。

所以请友好地帮助我或提出解决方法。谢谢。

编辑:代码的目标是在调用 A.foo 时打印 5。

最佳答案

您唯一的问题是您没有首先正确定义 foo 。它需要为调用它的实例采用显式参数。

class A(object):
def __init__(self)
self.x = 2

def foo(self):
print(self.x)

def foo(this):
print(this.x + 3)

A.foo = foo

a = A()
a.foo() # outputs 5 in Python 2 and Python 3

在一个非常真实的意义上,猴子修补是类最初的创建方式。 class 语句几乎只是以下代码的语法糖:

def foo(self):
print(self.x)
A = type('A', (object,), {'foo': foo})
del foo

type 的定义想象成类似的东西并不过分简化

def type(name, bases, d):
new_class = magic_function_to_make_a_class()
new_class.name = name
new_class.bases = bases
for k, v in d.items():
setattr(new_class, k, v)
return new_class

关于python - Monkey 补丁可以替换类中现有的函数定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856154/

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