python更改类名_可以用python修饰符更改类(类型)的名称吗?

尝试使用装饰器动态地为Django ORM模型类派生并更改类名,以便从文件名中获取类名。然而,装饰器应用后,类名未正确更新,导致在访问类属性时出现AttributeError。问题在于如何在不污染模型定义的情况下,正确地修改类的__name__属性。
摘要由CSDN通过智能技术生成

我试图通过装饰我的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__'

我需要装点模块吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值