【问题标题】:defining member functions within __init__在 __init__ 中定义成员函数
【发布时间】:2019-11-28 11:00:12
【问题描述】:

是否可以在 init 方法中在 python 类中定义成员函数?

我正在考虑类似于 setattr 或通过 lambda 的东西

class Engine(Base):
    def __init__(self):
        super(Engine, self).__init__(self)
        self.__class__.__call__ = lambda self, x: x

没用,但是

 class Engine(Base):
        def __init__(self):
            self.__class__.__call__ = lambda self, x: x
            super(Engine, self).__init__(self)

会,为什么会这样?

【问题讨论】:

  • 您应该将self 添加到您的lambda 表达式中,如下所示:lambda self, x: x

标签: python class init


【解决方案1】:

是的,你可以。像这样:

class Engine(Base):
    def __init__(self):
        super().__init__()
        self.__class__.__call__ = lambda self, x: x

a = Engine()
print(a(42))  # it prints 42

【讨论】:

  • 但是它是类方法而不是实例函数,不是吗?我面临的问题是 Engine 实际上是一个基类的子类,它需要将一个可调用对象传递给它的构造函数。所以我想实现派生类的调用操作符,然后把它作为self传递给它的基类
  • 不,它不是类方法。对于类方法,必须使用classmethod 装饰器。我在答案中添加了两行以说明它是如何工作的。
  • 谢谢,但是,基类需要传递一个可调用对象,所以我想通过在 init 方法中定义的调用方法将派生类传递给它。为什么在调用 super 之前我必须这样做?我修改了上面的代码
猜你喜欢
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2021-02-22
相关资源
最近更新 更多