On 9/04/20 10:02 AM, Martin Alaçam wrote:
Hello,
I have the following descriptor:
self._pi = None
@property
def pi(self) -> list:
self._pi = self._root.xpath('processing-instruction()')
return self._pi
Mypy says: "Incompatible return value type (got "None", expected
"List[Any]")"
The xpath expression always returns a list, if it doesn't find anything it
is an empty list. I am just getting started with type hinting, would
appreciate any help.
Out of interest, what happens if you change the function to:
self._pi:list = self._root.xpath('processing-instruction()')
Mypy *seems* to be remembering the type from the outer namespace and
noting that the function's use of the same name differs. (yes, you had
probably worked-out that for yourself)
Interestingly-enough, in a recent (off-line) communication with another
list-member, we noted similar behavior from (?) a linter or was it Black
("the uncompromising code formatter"), and concluded that because using
the same identifier in both 'inner' and 'outer' name-spaces can lead to
awkward 'gotchas' in certain situations, a general advice/'rule' of:
'don't do it' is being applied.
Perhaps there is another/a better reason that someone else will provide...
Disclaimers:
- Python typing (and thus: mypy) has a somewhat experimental approach
and is not a required part of the language, nor even particularly
integrated into the language, as-such.
- linters are useful to some people, particularly those which have an
option to turn-off individual aspects which otherwise become 'nagging'.
- some find Black useful, but to me its "uncompromising" philosophy
seems non-pythonic (IMHO) - and I won't recommend anything that thinks
it should make decisions because I'm too stupid (see also Apple, MSFT,
Google, ...).
- the latter assessment may be correct, but not IMHO.
--
Regards =dn
--
https://mail.python.org/mailman/listinfo/python-list