-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Property, classmethod and staticmethod aliases not supported #6700
Comments
Thanks for reporting! Yeah, unfortunately properties are known to be often problematic. They were implemented via some special-casing before a more general descriptor support was added. |
The problem is not only with properties, but with static and class methods too.
|
Hm, this is more serious than I though then, raising priority to high. |
And apparently with callable properties on a from typing import Callable
from dataclasses import dataclass
@dataclass
class Demo:
call_this: Callable[[str], str]
def call(s: str) -> str:
return s
demo = Demo(call_this=call)
demo.call_this("test") When run through mypy, this gets:
|
Currently, this issue forces rather awkward typing for
I'm not sure what is supposed to be a convincing way to type the alias; some attempts below: from __future__ import annotations
from typing import Callable
from types import MethodType
class A:
@classmethod
def _internal(cls) -> int:
return 0
public_1 = _internal # (bad; see `value_1`)
public_2: classmethod[int] = _internal # Incompatible types in assignment (expression has type "Callable[[Type[A]], int]", variable has type "classmethod[int]")
public_3: Callable[[], int] = _internal # Incompatible types in assignment (expression has type "Callable[[Type[A]], int]", variable has type "Callable[[], int]")
public_4: Callable[[type[A]], int] = _internal # (bad; see `value_4`)
public_5: MethodType = _internal # Incompatible types in assignment (expression has type "Callable[[Type[A]], int]", variable has type "MethodType")
public_6: Callable[..., int] = _internal # OK
public_7 = A._internal # OK
value_1: int = A.public_1() # Too few arguments
value_2: int = A.public_2() # (bad; see `public_2`)
value_3: int = A.public_3() # (bad; see `public_3`)
value_4: int = A.public_4() # Too few arguments
value_5: int = A.public_5() # (bad; see `public_5`)
value_6: int = A.public_6() # OK
value_7: int = public_7() # OK
|
Do you really require it to be an alias? Here's another workaround: class A:
@classmethod
def public_8(cls) -> int:
return cls._internal() |
``` scripts-dev/release.py:495: error: Unsupported right operand type for in ("Callable[[], IterableList[Reference]]") [operator] scripts-dev/release.py:496: error: Value of type "Callable[[], IterableList[Reference]]" is not indexable [index] ``` `refs` is an alias the the property `references`. Mypy gets confused by the alias, see python/mypy#6700
``` scripts-dev/release.py:495: error: Unsupported right operand type for in ("Callable[[], IterableList[Reference]]") [operator] scripts-dev/release.py:496: error: Value of type "Callable[[], IterableList[Reference]]" is not indexable [index] ``` `refs` is an alias the the property `references`. Mypy gets confused by the alias, see python/mypy#6700
``` scripts-dev/release.py:495: error: Unsupported right operand type for in ("Callable[[], IterableList[Reference]]") [operator] scripts-dev/release.py:496: error: Value of type "Callable[[], IterableList[Reference]]" is not indexable [index] ``` `refs` is an alias the the property `references`. Mypy gets confused by the alias, see python/mypy#6700
``` scripts-dev/release.py:495: error: Unsupported right operand type for in ("Callable[[], IterableList[Reference]]") [operator] scripts-dev/release.py:496: error: Value of type "Callable[[], IterableList[Reference]]" is not indexable [index] ``` `refs` is an alias the the property `references`. Mypy gets confused by the alias, see python/mypy#6700
``` scripts-dev/release.py:495: error: Unsupported right operand type for in ("Callable[[], IterableList[Reference]]") [operator] scripts-dev/release.py:496: error: Value of type "Callable[[], IterableList[Reference]]" is not indexable [index] ``` `refs` is an alias the the property `references`. Mypy gets confused by the alias, see python/mypy#6700
``` scripts-dev/release.py:495: error: Unsupported right operand type for in ("Callable[[], IterableList[Reference]]") [operator] scripts-dev/release.py:496: error: Value of type "Callable[[], IterableList[Reference]]" is not indexable [index] ``` `refs` is an alias the the property `references`. Mypy gets confused by the alias, see python/mypy#6700
Are there any updates on this issue? |
* remove unnecessary paths from Sphinx directives. * remove full alias autodoc from documentation. * work around mypy issue python/mypy#6700.
MyPy does not support property aliases. Example:
The text was updated successfully, but these errors were encountered: