假设元类A
需要参数。此元类的类B
必须分配这些参数。假设这个类B
是一个基类,那就是它的imediat派生类,它们应该分配这些参数。如果这有意义,这是否可行?如果这没有意义,为什么呢?
希望它有助于理解这个问题,这里是具体案例的摘录(并没有假装出奇妙),只显示相关部分(不是严格有效的Python,因为占位符)。请注意这个例子对于Python3是有效的,我不确定它是否与之前的Python版本一致(我在评论后添加的一点)。
class Type(type)
def __new__(…, elements)
…
class ArrowType(Type):
def __new__(…, domain, codomain)
# This build a suitable `elements`
# parameter, from its own arguments,
# for the call to `Type.__new__`
…
class Function(
object,
metaclass=ArrowType,
domain=…,
codomain=…)
…
假设Function
类应该是基类,但它并不具体。它的domain
和codomain
参数是ArrowType
的摘要。假设没有合理的默认值,并提供None
或()
或者知道什么的默认值,不被认为是好的(看起来像是黑客)。
我试图使Function
抽象,但未能从中获得解决方案,因为参数仍然需要在Function
的定义点进行实例化。或者可能是我做错了?
好吧,我可以使用一个函数:
def function(domain, codomain):
class Function(
object,
metaclass=ArrowType,
domain=domain,
codomain=codomain)
…
return Function
这有效,但我不喜欢它,原因有多种:1)Function
在函数体中是“隐藏的”,2)这不再是一个基类(也不是真正的抽象) ,因为它结束了与从它派生的类一样多的基类(每个都调用function
),3)实例获得的类名称由type(…)
显示,是丑陋的。 / p>
简而言之,就Function
和domain
参数而言,codomain
是抽象的,这些参数将在其派生类中分配一些内容。