【发布时间】:2020-09-30 02:18:57
【问题描述】:
为了简化处理数据库表的代码,我写了一个元类工厂,如下所示:
#metaClass factory
def base_service(clz_of_model):
@db.transactional
def add(self, obj):
m = clz_of_model(**obj)
db.session.add(m)
return m
class BaseService(type):
def __new__(mcs, name, base, attrs):
attrs["add"] = add
return super().__new__(mcs, name, base, attrs)
return BaseService
#define a model
class UserModel(Base):
#....
#define a service
class UserService(object,metaclass=base_service(UserModel):
#....
#using service
user_service=UserSerivce()
user_service.add({"name":'tom'})
代码确实有效,但一个不便之处是:
当我输入“user_servce”时。在 Pycharm 中,IDE 不会建议 user_service 具有由元类定义的“添加”功能。
PyCharm 的建议如何发挥作用?我能有更好的解决方案来使用 Python 的元类吗?
【问题讨论】: