Python -描述符的TypeHint



我想有一个基类为我所有的描述符的类型描述符:

  1. 使用GetSetDescriptorType是否正确?
class MyDescriptorBase(GetSetDescriptorType):
pass

现在我声明

class MyDescriptor(DescriptorBase):
def __get__(self, __obj: MyObj, objtype: Type[MyObj] ):
pass

一个pycharm检查投诉:

得到()不匹配签名。

我已经查了签名是:

# types.pyi
def __get__(self, __obj: Any, __type: type = ...) -> Any: ...
  1. 是检查错误还是我的申报错误?

不,使用GetSetDescriptor类作为基类是无效的类型检查,因为该类是final。

你真的不需要这个基础,因为描述符现在有很好的支持。

你的定义中的问题是缺少objtype的默认值:parent可以用一个参数调用,而child - no,所以这违反了LSP。所以下面是兼容的:

class MyDescriptor(MyDescriptorBase):
def __get__(self, obj: MyObj, objtype: type[MyObj] | None = None):
pass

最新更新