-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Open
Labels
stubs: improvementImprove/refactor existing annotations, other stubs issuesImprove/refactor existing annotations, other stubs issues
Description
Calling int() and str() with no arguments returns 0 and "" respectively, likewise for bool() == False and bytes() == b"". But to actually call these constructors without arguments is very unusual and is likely a mistake on part of the user.
# a and b are two strings
x = int(a)
y = int() # typo, should be int(b)
x / y # ZeroDivisionErrorIt will be helpful for type stubs to denote that such no-argument calls return a constant value, and for IDEs to possibly notify of such use.
Currently the stub for int.__new__ looks like this:
Line 257 in 904ea9e
| def __new__(cls, x: ConvertibleToInt = 0, /) -> Self: ... |
class int:
@overload
def __new__(cls, x: ConvertibleToInt = 0, /) -> Self: ...and str.__new__:
class str(Sequence[str]):
@overload
def __new__(cls, object: object = "") -> Self: ...I suggest adding an overload with no argument and removing the default parameter value from the one-arg __new__, though I'm not sure if there are existing special behaviors of type checkers regarding builtins that I'm unaware of.
Metadata
Metadata
Assignees
Labels
stubs: improvementImprove/refactor existing annotations, other stubs issuesImprove/refactor existing annotations, other stubs issues