def __new__(cls, name, bases, attrs):
new_class = super(AliasType, cls).__new__(cls, name, bases, attrs)
# see whether we've got an Alias inner class:
if inspect.isclass(attrs.get('Alias', None)):
alias = attrs['Alias']
setattr(new_class, '__aliases', {})
for attr, value in alias.__dict__.items():
# don't want any "private" attrs appearing
if attr.startswith('_'):
continue
# don't care if these aren't tuples or lists
if not isinstance(value, (tuple, list)):
continue
# no point in setting up an alias for something which isn't a
# class attribute:
if not attr in attrs:
continue
# if we've got to here put the lookups into the __aliases dict:
for key in value:
new_class.__dict__['__aliases'][key] = attr
setattr(new_class, key, AliasDescriptor(key))
return new_class
评论列表
文章目录