以 WTForms 表单定义类为例:
class RegistrationForm(Form):
username = StringField('Username', [validators.Length(min=4, max=25)])
email = StringField('Email Address', [validators.Length(min=6, max=35)])
accept_rules = BooleanField('I accept the site rules', [validators.InputRequired()])
并查看库的源代码,似乎 WTForms 允许用户定义一个非常简单的自定义表单结构类(如上),然后用于构造一个新的字段类,该类在类被实例化时不会被实例化生成。
我已经阅读了许多关于类工厂和元类的教程,普遍的共识是避免使用元类,而是使用类装饰器之类的东西。问题是教程要么开始导入额外的库,例如:import six
混合不同 Python 版本的解释,使用过于复杂的示例,要么建议根本不要使用元类。
请有人提供一个非常简单的解释(对于 Python 3),说明如何使用简单的类定义(如上面的 WTForms 示例)以及元类来自定义类的全新构造,而无需在构造类时实际实例化类。
编辑:很抱歉很难解释我的最终目标是什么,但是当我浏览教程时,我不清楚类装饰器、元类、魔术方法(call、new、init)或这些方法的组合是什么需要实现我所想象的,或者我所想象的是否是错误的做事方式。不幸的是,如果不了解实现目标所需的机制,似乎无法判断我的目标是否错误。我已经意识到元类是要走的路,只需要为一个非常简单的元类示例指明正确的方向,以 Python 3.x 的方式完成。