我试图通过装饰我的Django(ORM)模型(类定义)来自动编码100个数据库表模型,从而从文件名中派生出它们的类名。但我觉得我的“装饰深度”太浅了。我需要在我的__call__方法中使用函数def或类定义吗?像这样简单的事情就做不到吗?在# decorators.py
import os
from inspect import get_module
class prefix_model_name_with_filename(object):
'Decorator to prefix the class __name__ with the *.pyc file name'
def __init__(self, sep=None):
self.sep = sep or ''
def __call__(self, cls):
model_name = os.path.basename(getmodule(cls).__file__).split('.')[0]
setattr(cls, '__name__', model_name + self.sep + getattr(cls, '__name__'))
return cls
decorator的示例用法
^{pr2}$
模型不存在于具有新名称的模块定义中,并且我不能使用它而不在decorator类(而不是model类)中查找属性!在>>> from sec_mirror.models import ShipMeth
>>> ShipMeth.__name__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/Hobson/.virtualenvs/dev/lib/python2.7/site-packages/django/core/management/commands/shell.pyc in ()
----> 1 ShipMeth.__name__
AttributeError: 'prefix_model_name_with_filename' object has no attribute '__name__'
我需要装点模块吗?在