我希望此Template类接受type(i) in self._allowed_types
的自身和其他类型的子项。
class Template():
_allowed_types = [str, Template, SafeHtml]
上面的代码抛出了这个:
NameError: name 'Template' is not defined
答案 0 :(得分:6)
在定义类后添加类:
class Template():
_allowed_types = [str, SafeHtml]
Template._allowed_types.append(Template)
必要时,类体在可以创建类对象之前运行,因此名称Template
未定义尚未。但是,您可以在创建对象后始终更改类属性。
答案 1 :(得分:0)
另一种(也许是更清洁的)方式是声明一个中间类:
class BasicTemplate():
pass
class Template(BasicTemplate):
_allowed_types = [str, BasicTemplate]
BasicTemplate
可以是完全虚拟的,或者包含一些有用的代码。拥有一个不的模板允许包含它自己可能在某些时候派上用场。
当然,这需要isinstance
代替type()
来检查类型,但无论如何这都是个好主意。
答案 2 :(得分:0)
另一种选择是使用属性来对该字段进行延迟。
class Test(object):
@property
def allowed(self):
return [str, Test]
t = Test()
print Test in t.allowed