Issue
I'm trying out using Python's type annotations
with abstract class.
My __init__
function looks like this:
from abc import ABCMeta
class SomeClass(object, metaclass=ABCMeta):
def __init__(self, *args, **kwargs):
print("Initiating %s object.", self.__class__.__name__)
self.username = kwargs['data']
assert isinstance(self.username, str)
is_premioum = kwargs.get('premioum', False)
self.money_investmant = kwargs.get('investmant')
if isinstance(self.money_investmant, str):
self.money_investmant = float(self.money_investmant)
As you can see, kwargs
could contain arguments from a several number of types- float
, bool
and str
.
Now, I am trying to write the type annotation for the function, that looks like this:
def __init__(self, *args, **kwargs: Union[bool, str, float]) -> None:
But my PyCharm
IDE alerts me:
Except type 'Integral', got 'str' instead
And:
Cannot find referance 'get' in bool | str | float'
Am I doing something wrong?
How should I write the type annotation for kwargs if it contains arguments from multiple types?
Solution
See this bug and this bug on the issue tracker for PyCharm. This is apparently an issue with PyCharm's checker; mypy
(another type checker for Python) does not complain when I execute similar code.
There's already a fix for this and, it's apparently available in build 171.2014.23. Until then, I'd suppose Any
would suffice as a temporary workaround to get the checker to stop complaining.
Answered By - Dimitris Fasarakis Hilliard
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.