参考代码 2.9.3 版本:https://github.com/leancloud/python-sdk/blob/v2.9.3/leancloud/query.py#L117 ```python query = Query(queries[0]._query_class._class_name) ``` 1. 不应该使用 Query 声明新的对象,而应该使用 cls 来声明,否则会导致继承 Query 得来的 MyQuery 类的 or_ 方法和 and_ 方法返回父类声明的实例。 ```python In [1]: from leancloud import Query In [2]: class MyQuery(Query): ...: pass ...: In [3]: type(MyQuery('User').or_(MyQuery('User'), MyQuery('User'))) Out[3]: leancloud.query.Query ``` 2. 没有正确处理 ObjectMeta 中特殊处理过的 _ 开头的表。 ```python In [1]: from leancloud import User In [2]: User.query._query_class Out[2]: leancloud.user.User In [3]: User.query.or_(User.query, User.query)._query_class Out[3]: leancloud.object_._User ```
Activity
Ma233 commentedon May 19, 2021
以上问题会给通过继承 Object 和 Query 来自定义功能带来困扰。
weakish commentedon May 20, 2021
SDK 的设计当时没有考虑 Query 的子类化。(当然很欢迎提 PR