为了简化代码处理数据库表,我写了一个metaClass工厂,如下所示:
#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具有由metaClass定义的“添加”功能。 Pycharm的建议如何运作?我可以使用python的元类有更好的解决方案吗?
为了简化代码处理数据库表,我写了一个metaClass工厂,如下所示:#metaClass factory def base_service(clz_of_model):@ db.transactional def add(self,obj):m = clz_of_model(** ...
您不能。
由于这个简单的原因,它不能被静态检测到-也不是,也不是将动态方法和属性添加到类的其他数十种方法。