【发布时间】:2014-08-06 20:27:16
【问题描述】:
我正在尝试从元类中读取基类变量以使用此代码覆盖类变量:
class TypeBaseMeta(type):
def __new__(cls, name, bases, namespace, **kwds):
for base in bases:
namespace['__validators__'] = base['__validators__'] + namespace['__validators__']
return type.__new__(cls, name, bases, namespace, **kwds)
class TypeBase(metaclass=TypeBaseMeta):
__validators__ = ('presence')
def __init__(self, *args, **kwargs):
pass
def validate_presence(self, flag):
if self.data:
return True
class String(TypeBase):
__validators__ = ('length')
def validate_length(self, range):
if len(self.data) in range(*range):
return True
但我收到了这个错误:
Traceback (most recent call last):
File "types.py", line 18, in <module>
class String(TypeBase):
File "types.py", line 4, in __new__
namespace['__validators__'] = base['__validators__'] + namespace['__validators__']
TypeError: 'TypeBaseMeta' object is not subscriptable
我知道可下标对象必须有 __getitem__() 并且表现得像字典和列表,但我不知道是什么导致了这个错误。
【问题讨论】:
-
您的验证器是字符串,而不是字符串元组。单个元素元组指定为
(item,)
标签: python python-3.x metaprogramming