小编ljm*_*jmc的帖子

类型提示返回子类的类装饰器

我有一组不相关的类(一些是导入的),它们都有一个a类型为 的公共属性(或属性) dict[str, Any]

其中akey 下应该有另一个字典"b",我想将其作为属性公开在任何这些类上b以简化inst.a.get("b", {})[some_key]inst.b[some_key]

我已将以下子类工厂用作本地类的类装饰器和导入类的函数。

但到目前为止,我未能cls正确键入提示其参数并返回值。

from functools import wraps

def access_b(cls):
    @wraps(cls, updated=())
    class Wrapper(cls):
        @property
        def b(self) -> dict[str, bool]:
            return self.a.get("b", {})
    return Wrapper
Run Code Online (Sandbox Code Playgroud)

我最近一次打字尝试的 MRE(有mypy 0.971错误):

from functools import wraps
from typing import Any, Protocol, TypeVar

class AProtocol(Protocol):
    a: dict[str, Any]

class BProtocol(AProtocol, Protocol):
    b: dict[str, bool]

T_a = TypeVar("T_a", bound=AProtocol)
T_b = TypeVar("T_b", bound=BProtocol)

def …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-decorators python-typing

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

将条件子句(Where)添加到密集排名函数

我想创建一个排名函数来计算一个人访问财产的次​​数BY DATE,但条件是不包含访问类别。'Calls'

DENSE_RANK() over(partition by activitytable.[Property] 
ORDER BY activitytable.[Date] as Job rank
Run Code Online (Sandbox Code Playgroud)

这样做对我不想要的整个通信表进行排名。

活动ID 财产 日期 通讯类型
1046 红色地产 2019年10月30日 场地 2
10467 红色地产 2019年10月29日 场地 1
10591 红色地产 2019年10月28日 通话
10971 蓝色地产 2019年10月27日 场地 2
10971 蓝色地产 2019年10月26日 场地 1
10971 蓝色地产 2019年10月26日 来电
10965 绿色地产 2019年10月24日 来电
10765 绿色地产 2019年10月23日 来电
10765 绿色地产 2019年10月19日 场地 3
10765 绿色地产 2019年10月15日 场地 2
10765 绿色地产 2019年10月12日 场地 1

理想情况下,我希望表格像上面一样显示,以忽略通信类型列的呼叫元素并仅计数字段类别。我怎么能这样做呢?

sql sql-server dense-rank ranking-functions

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