小编Jar*_*rad的帖子

如何将运行时对象类型用作泛型类型提示参数?

介绍

使用Python/MyPy类型提示,可以使用.pyi存根将注释保存在单独的文件中以实现.我正在使用此功能来提供SQLAlchemy的ORM(更具体地说,flask_sqlalchemy插件)的基本提示.

模型定义如下:

class MyModel(db.Model):
    id = db.Column()
    ...
...
Run Code Online (Sandbox Code Playgroud)

其中db.Model直接包含在SQLAlchemy中.例如,可以通过以下方式查询它们:

MyModel.query.filter({options: options}).one_or_none()
Run Code Online (Sandbox Code Playgroud)

其中filter()返回另一个Query,one_or_none()返回MyModel的实例(显然是None).

下面的.pyi文件成功提示上面的构造,虽然它不完整 - 没有办法提示返回类型one_or_none().

class _SQLAlchemy(sqlalchemy.orm.session.Session):
    class Model:
       query = ... # type: _Query

class _Query(sqlalchemy.orm.query.Query):
    def filter(self, *args) -> query.Query: ...
    def one_or_none(self) -> Any: ...

db = ... # type: _SQLAlchemy
Run Code Online (Sandbox Code Playgroud)

问题

如何完全和一般地暗示上述内容,并提示one_or_none()的返回类型?我的第一次尝试是使用泛型,但看起来我无法访问所讨论的子类型(在给定的示例中,MyModel).为了说明一种非工作方法:

from typing import Generic, TypeVar

_T = TypeVar('_T')

class _SQLAlchemy(sqlalchemy.orm.session.Session):
    class Model:
       def __init__(self, *args, **kwargs):
           self.query = ... # type: _Query[self.__class__]

class _Query(Generic[_T], sqlalchemy.orm.query.Query):
    def filter(self, *args) -> _Query[_T]: ...
    def …
Run Code Online (Sandbox Code Playgroud)

python type-hinting python-3.5

10
推荐指数
1
解决办法
516
查看次数

是否有一个等同于`window`的es6模块范围?

在Javascript中,我们可以使用window对象在任何点添加全局变量:

'use strict';
var a = 1;

function test() {
  window.b = 2;
}

test();
console.log(a); // a
console.log(b); // b
Run Code Online (Sandbox Code Playgroud)

是否有类似(或非类似!)的方式将vars分配给ES6中的当前模块范围?

谢谢

javascript scope ecmascript-6

4
推荐指数
1
解决办法
754
查看次数

在 Polars 中,我可以自己创建带有级别的分类类型吗?

在 Pandas 中,我可以自己指定分类类型的级别:

MyCat = pd.CategoricalDtype(categories=['A','B','C'], ordered=True)
my_data = pd.Series(['A','A','B'], dtype=MyCat)
Run Code Online (Sandbox Code Playgroud)

这意味着

  1. 我可以确保不同的列和集使用相同的数据类型
  2. 我可以指定级别的顺序。

有没有办法用 Polar 来做到这一点?我知道您可以使用字符串缓存功能以不同的方式实现 1),但是我很感兴趣是否可以直接指定我的 dtype/levels。我不知道有什么方法可以实现 2),但是我认为 Arrow 中的分类数据类型确实允许可选的排序,所以也许这是可能的?

rust-polars python-polars

4
推荐指数
1
解决办法
4932
查看次数

如何在没有整个模块的情况下将类型导入 Typescript?

我正在用 Typescript 编写一段 Express 中间件。它将作为独立包发布到 npm。我希望能够使用 Express 类型定义我的函数,因为这让我可以使用类型安全进行编写:

function playWithRequest( req: express.Request, res: express.Response, next: express.NextFunction ) {
    req['key'] = 'stuff';
}

module.exports = playWithRequest;
Run Code Online (Sandbox Code Playgroud)

但是,我不需要require('express')自己,并且我想避免import会生成此类require()调用的语句。如何在不导入 express 本身的情况下告诉 Typescript 有关 express 类型的信息?

快速类型由 安装npm install @types/express,因此在node_modules/@types/express/index.d.ts.

import node.js npm typescript

1
推荐指数
1
解决办法
1297
查看次数