【发布时间】:2020-03-04 07:36:30
【问题描述】:
我很清楚可以在 python 中使用type 动态声明类,并在这里和那里使用它。但是我仍然不清楚这两个功能之间有什么区别。
def class_factory():
def init(self, attr):
self.attr = attr
class_ = type('DynamicClass', (), {'__init__' : init})
return class_
和
def class_factory():
class DynamicClass:
def __init__(self, attr):
self.attr = attr
return DynamicClass
我已经看到很多代码库(如 django)中使用的第一个模式,但到目前为止从未见过第二个模式。我仍然发现第二个在语法上更清晰。
我正在努力寻找正确的解释来解释为什么人们使用first pattern 来声明动态类而不是second。我对这两个函数都进行了试验,但在从这两个函数获得的类之间没有发现任何显着差异。我希望从它们不同的任何方面(性能方面或任何其他方面)清楚地解释上述两种模式/语法之间的差异。
谢谢,
【问题讨论】:
-
我之前已经使用过第二种模式,但很少使用。正如其他一些答案所述,直接使用
type()提供了最大的灵活性。例如,如果您希望能够计算必须使用的类的 nametype();类似地,如果类体是以某种方式计算的(甚至是它的基类)。
标签: python class dynamic dynamic-class-creation dynamic-class