Open anthrotype opened 2 years ago
I think this is the same issue as https://github.com/python/mypy/issues/10187
Even without the on_setattr
feature, just using a plain property setter decorator that calls the converter, I get the same error from mypy about Incompatible types in assignment
.
@define(on_setattr=setters.NO_OP)
class Glyph:
_lib: Lib = field(factory=Lib, converter=_convert_lib)
@property
def lib(self) -> Lib:
return self._lib
@lib.setter
def lib(self, value: Mapping[str, Any]) -> None:
self._lib = _convert_lib(value)
It appears that mypy doesn't support "asymmetric properties" whereby the setter annotation is different from the getter => https://github.com/python/mypy/issues/3004
But am not sure if that's the same or related issue to the on_setattr=convert
one.
My gut feeling is that mypy's support for setters is simply too spotty but maybe the typing experts could chime in. :-/
Not sure if this is a mypy issue or attrs or both.
I have an attrs class that defines a field with a converter that coerces the input value to a custom dict subclass. It works fine when creating a new object, I pass in a dict and the field gets converted to the my dict subclass. I think #710 is responsible for inferring
__init__
annotations from the converters'.Now I would like to do the same with
on_setattr
, by usingattrs.setters.convert
: i.e. I want to set the field to a plain dict and have it converted automatically using the field converter to my dict subclass.This works fine at runtime, but when I run mypy on my code, it complains that
Incompatible types in assignment (expression has type Dict[...], variable has type "...")
when I do that.Here's a made up example:
Is there a way around this besides an ugly
# type: ignore
on every line I use the attrs generated setter-cum-converter?thanks in advance