【发布时间】: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