So I have a function (let's call it fun1) that accepts a function as a parameter. But inside fun1, I need to access the parameter's __self__, which exists only if the function is a bound method.
The function itself must accept two str args and return a bool.
In other words, like this:
MyFuncType = Callable[[str, str], bool]
# fun1 is an unbound function
def fun1(func: MyFuncType):
...
o = func.__self__
...
# Some logic on the "o" object, such as logging the object's class,
# doing some inspection, etc.
...
If I use MyFuncType like the above, PyCharm will complain that __self__ is not an attribute of func.
So, what type hint should I annotate func with, so that PyCharm (and possibly mypy) won't protest on that line?
(I'm using Python 3.6 by the way)
Okay after some experimentation, I settle with this:
class BoundFunc:
__self__: object
MyFuncType = Callable[[str, str], bool]
MyBoundFuncType = Union[MyFuncType, BoundFunc]
def fun1(func: MyBoundFuncType):
...
o = func.__self__
...
This does NOT warn me if I pass an unbound function to fun1, but at least it suppresses PyCharm's warning when I try to access the __self__ property.
I figure a proper docstring on fun1 explicitly saying that func MUST be a bound method should be enough for adults...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With