区分 class 和 Python 类型提示中的对象

Differentiate class and object in Python type hints

Django's post_save signal 发送一个模型 class 参数 – sender – 连同被保存的实际实例 – instance.

有没有办法在类型提示中区分两者?

例子

我们有一个模型 User 并且想要创建一个 post_save 信号:

# …
@receiver([post_save], sender=User)
def send_activation_email(
    sender: User, 
    instance: User, 
    # …
) -> None:
    # …

如您所见,我给了 senderinstance 相同的类型提示 – User。但它们不是同一类型。第一个是 class,第二个是对象。那么,有没有办法区分这两者呢?

您要找的是typing.Type

from typing import Type
# …
@receiver([post_save], sender=User)
def send_activation_email(
    sender: Type[User], 
    instance: User, 
    # …
) -> None:
    # …

感谢 @Michael0x2a 的评论,为了清晰和可读性而发布此答案。