我想有一个基类为我所有的描述符的类型描述符:
- 使用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: ...
- 是检查错误还是我的申报错误?
不,使用GetSetDescriptor
类作为基类是无效的类型检查,因为该类是final。
你真的不需要这个基础,因为描述符现在有很好的支持。
你的定义中的问题是缺少objtype
的默认值:parent可以用一个参数调用,而child - no,所以这违反了LSP。所以下面是兼容的:
class MyDescriptor(MyDescriptorBase):
def __get__(self, obj: MyObj, objtype: type[MyObj] | None = None):
pass