【问题标题】:using class attributes function in class method - python在类方法中使用类属性函数 - python
【发布时间】:2017-12-24 20:07:21
【问题描述】:

我正在尝试在 python 中使用此代码:

class A:
    func = lambda: "go away"
    @classmethod
    def apply(cls):
        cls.func()
A.apply()

我收到此错误:

unbound method <lambda>() must be called with A instance as first argument (got nothing instead)

我怎样才能让它工作?

【问题讨论】:

  • 这是一个类方法 - 它需要是func = lambda cls: ... ...
  • 您不能在 Python 2.x 中将 lambda 声明为类/静态函数。你的代码应该可以在 Python 3.x 中运行,这让每个看到它的人都感到恐惧。一开始你为什么要这样做?
  • 在我的原始代码中,“离开”是服务功能,在其他地方定义。 apply 函数是一个工厂方法,它使用这个函数。 func 是从外部定义的。
  • 使用func = lambda cls: ... 没有帮助。它仍然失败。

标签: python python-2.x class-attributes


【解决方案1】:

执行apply(A) 有效。但是,您还需要解决 func 的问题。

【讨论】:

    【解决方案2】:

    所以这里有很多问题。我不太确定您要实现什么目标,但是您肯定必须再看一下文档。 首先,看看你的班级。 在里面你想指定一个函数,Python 使用了一个def func(args) 方法给它。如果你想在一个类中使用它,你应该使用self作为参数。

    来自文档:

    class MyClass:
        """A simple example class"""
        i = 12345
    
        def f(self):
            return 'hello world'
    

    另外,lambda 是一个匿名函数。当你定义它时,你应该这样做:

    s = lambda x: x**2
    s(2)
    

    x 是你的函数参数,x**2 是你想要返回的东西,所以函数会返回 4。

    希望它会减少一些混乱,并且您会以更好的方式编写代码。祝你好运!

    【讨论】:

    • 我已经简化了我的代码,所以阅读起来不会太多,但我有理由这样做,正如我在上面的评论中提到的那样。您知道以不同方式保留此功能的任何方法吗?
    • 看看你的错误。正如我在回答中解释的那样,Lambda 函数需要 2 个参数。而且你的代码过于简化与语法错误无关,对不起,这还不够。
    • 我确定你弄错了,关于 2 个论点。我猜您对类中 lambda 的定义是正确的,即需要 self 第一个参数。
    • 我也尝试在另一个模块中定义该函数,但它仍然不允许我在classmethod方法中运行它。
    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    相关资源
    最近更新 更多