【发布时间】:2017-05-27 21:44:43
【问题描述】:
我正在使用luigi 工作流库。我想继承它的luigi.Task 类来添加更多我自己的方法和参数。
通常的对象模式是:
class MockClassA():
pass
class MockClassB():
def __init__(self, foo):
super().__init__()
self.foo = foo
>>> MockClassB(12).foo
<<< 12
但是,当我这样做时:
class Transform(luigi.Task):
def __init__(self, foo):
super().__init__()
self.foo = foo
我明白了:
>>> Transform(12)
<<< [...] UnknownParameterException: Transform[args=(12,), kwargs={}]: takes at most 0 parameters (1 given)
为什么会这样?
【问题讨论】:
-
它可能也定义了
__new__ -
我在source 中没有看到它这样做。 (除非
six.add_metaclass(Register)装饰器这样做;不熟悉six,但我非常怀疑) -
这是实际的堆栈跟踪:i.fluffy.cc/sVJCJ9Xfz8tCtWmJvkmV0jWNhPjcTrxf.html 它在
Register.__call__内部崩溃(Register是一个元类,添加了six.add_metaclass) -
是的,我仔细一看正要收回来。隐藏在兼容性库中的元编程......那么就不可能对元分类类进行子类化吗?
标签: python-3.x class subclass luigi