【问题标题】:Python and Mixins with SuperPython 和带有 Super 的 Mixins
【发布时间】:2020-10-12 14:36:44
【问题描述】:

我有以下课程

from somewhere import ParentClass
from mixin_file import Mixin1 and Mixin2

class Test(Mixin1, Mixin2, ParentClass):
    def __init__(self):
        super(Test, self).__init__()

在 mixin_file 中

from abc import ABCMeta, abstractmethod

class Mixin1(object):
    __metaclass__ = ABCMeta
    @abstractmethod
    def do_something(self):
        pass

class Mixin2(object):
    def hello(self):
        pass

当我跑步时

x = Test()

错误

TypeError:__init__() takes exactly 0 arguments (2 given)

当我初始化 'x' 时,我需要传递 Mixin 吗?我不太清楚这种行为。

【问题讨论】:

  • 这里有很多问题。 Object 是什么?它必须覆盖do_something,并且它显然试图在调用后将参数传递给super().__init__,因为您显示的代码中没有任何内容。
  • @chepner - 我更新了帖子。 Object(曾经)是一个不覆盖 do_something 的父类。这是我不清楚的 Mixins 周围的超级行为
  • 混入不是问题。它们不会覆盖__init__,因此Test.__init__ 通过super 直接转到ParentClass.__init__

标签: python typeerror mixins init super


【解决方案1】:

操作顺序最终成为这里的问题。之后我需要添加 mixins

class Test(Mixin1, Mixin2, ParentClass):

也去

class Test(ParentClass, Mixin1, Mixin2):

【讨论】:

  • 这个答案(以及随之而来的问题)对于更广泛的 Stack Overflow 社区来说是无用的,因为没有透露ParentClass 定义的哪一部分使订单相关。
猜你喜欢
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2016-02-11
相关资源
最近更新 更多