【发布时间】:2022-01-08 23:33:05
【问题描述】:
给了我一个A-type 对象的指定工厂。我想制作一个新版本的A-type 对象,它也具有Mixin 类中的方法。由于这里解释太长的原因,我不能使用class A(Mixin),我必须使用A_factory。下面我试着举一个简单的例子。
我天真地认为从Mixin 继承并赋予A 类型的对象以mixin 方法就足够了,但是下面的尝试不起作用:
class A: pass
class A_factory:
def __new__(self):
return A()
class Mixin:
def method(self):
print('aha!')
class A_v2(Mixin): # attempt 1
def __new__(cls):
return A_factory()
class A_v3(Mixin): # attempt 2
def __new__(cls):
self = A_factory()
super().__init__(self)
return self
事实上A_v2().method() 和A_v3().method() 提高了AttributeError: 'A' object has no attribute 'method'。
在class A_vn(Mixin) 中使用A_factory 以使工厂创建的A 类型的对象继承mixin 方法的正确方法是什么?
【问题讨论】:
-
为什么不
class A(Mixin)?为什么需要A_factory? -
我需要使用
A_factory,因为它包含很多用于创建和初始化适当的A的逻辑(A类型的对象没有简单的初始化)。我只需要为这些对象添加一些功能。
标签: python initialization mixins