【问题标题】:Is it possible to dynamically populate Python methods with code?是否可以用代码动态填充 Python 方法?
【发布时间】:2013-08-02 06:36:46
【问题描述】:

我有许多方法,格式如下:

def p_methodone(a):
    pass

def p_methodtwo(a):
    pass

...

我想删除pass 并使用代码a[0] = a[1] 填充这些方法。是否可以在 Python 中使用反射之类的东西动态地做到这一点?原因是我有很多这些方法,并且代码a[0] = a[1] 稍后可能会更改 - 最好只在一个地方更改它(而不是进行搜索)并替换)。

(注意:我无法以任何方式更改这些定义,因为外部库依赖于它们的这种格式。)

【问题讨论】:

  • 程序的其他部分是否可能引用了您希望更改的功能?如果是这样,在像 sfk 和 Rustam 建议的那样重新绑定名称后,这些部分仍将具有旧功能。谈话Don't Do This: Some things you should never do in python 中提出了即使在这种情况下也应该有效的解决方案。它涉及弄乱__code__ 属性。当然,这只是学术兴趣,因为您不应该这样做。 :)

标签: python reflection introspection


【解决方案1】:

改用 lambda!

y = lambda a: a[0] = a[1]
y([1, 2, 3])

【讨论】:

    【解决方案2】:

    您可以使用 lambda 函数或其他函数覆盖函数定义

    >>> def newdef(a): return a+1
    ... 
    >>> p_methodone = newdef
    >>> p_methodone(10)
    11
    
    >>> def newdef(a): return a+2
    ... 
    >>> p_methodone = newdef
    >>> p_methodone(10)
    12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多