gpt4 book ai didi

python - 防止函数成为 Python 2 中的实例方法

转载 作者:太空狗 更新时间:2023-10-30 01:51:04 24 4
gpt4 key购买 nike

我正在编写一些适用于 Python 3 但不适用于 Python 2 的代码。

foo = lambda x: x + "stuff"

class MyClass(ParentClass):
bar = foo

def mymethod(self):
return self.bar(self._private_stuff)

我希望它只打印私有(private)内容,但如果我尝试运行我的方法,我会得到:

TypeError: unbound method <lambda>() must be called with MyClass instance as first argument (got str instance instead)

当然,以上并不是实际的代码,而是对真实事物的简化。我想这样做是因为我需要传递私有(private)信息,我不想将这些信息暴露给最终用户,即扩展我的类(class)的任何人。但是在 Python 2 中,全局级别的 lambda(或任何普通函数)变成了 instancemethod,在这种情况下这是不需要的!

为了使这段代码可移植,您有什么建议?

最佳答案

最简单的:

class MyClass(ParentClass):
bar = staticmethod(foo)

其余代码保持不变。虽然 staticmethod 最常被用作“装饰器”,但并不要求这样做(因此,不需要进一步的间接级别来使 bar 成为装饰器方法调用 foo).

关于python - 防止函数成为 Python 2 中的实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27735009/

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