gpt4 book ai didi

python - 如何动态创建与另一个函数具有相同签名的函数?

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:00 25 4
gpt4 key购买 nike

我正忙于创建一个元类,用一个具有适当实现的新函数替换类上的 stub 函数。原始函数可以使用任何签名。我的问题是我不知道如何创建一个与旧函数具有相同签名的新函数。我该怎么做?

更新

这与实际问题“如何动态创建一个与另一个函数具有相同签名的函数?”无关,但我添加这个是为了说明为什么我不能t 使用子类。

我正在尝试实现类似 Scala Case Classes 的东西在 Python 中。 (不是模式匹配方面,只是自动生成的属性、eq、hash 和 str 方法。)

我想要这样的东西:

>>> class MyCaseClass():
... __metaclass__ = CaseMetaClass
... def __init__(self, a, b):
... pass

>>> instance = MyCaseClass(1, 'x')
>>> instance.a
1
>>> instance.b
'x'
>>> str(instance)
MyCaseClass(1, 'x')

据我所知,子类无法做到这一点。

最佳答案

我相信 functools.wraps 不会重现原始调用签名。然而,Michele Simionato 的 decorator module做:

import decorator

class FooType(type):
def __init__(cls,name,bases,clsdict):
@decorator.decorator
def modify_stub(func, *args,**kw):
return func(*args,**kw)+' + new'
setattr(cls,'stub',modify_stub(clsdict['stub']))
class Foo(object):
__metaclass__=FooType
def stub(self,a,b,c):
return 'original'


foo=Foo()
help(foo.stub)
# Help on method stub in module __main__:

# stub(self, a, b, c) method of __main__.Foo instance

print(foo.stub(1,2,3))
# original + new

关于python - 如何动态创建与另一个函数具有相同签名的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479412/

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