[issue43682] Make static methods created by @staticmethod callable

2021-04-13 Thread Inada Naoki
Inada Naoki added the comment: Strictly speaking, adding any method is "potential" breaking change because hasattr(obj, "new_method") become from False to True. And since Python is dynamic language, any change is "potential" breaking change. But we don't treat such change as breaking change.

[issue43682] Make static methods created by @staticmethod callable

2021-04-12 Thread Mark Shannon
Mark Shannon added the comment: Are you asking why breaking backwards compatibility is an issue? Or how it breaks backwards compatibility? pydoc could be changed to produce the proposed output, it doesn't need this change. We don't know what this change will break, but we do know that it is

[issue43682] Make static methods created by @staticmethod callable

2021-04-12 Thread STINNER Victor
STINNER Victor added the comment: Mark Shannon: > Changing static methods to be callable will break backwards compatibility for > any code that tests `callable(x)` where `x` is a static method. Can you please elaborate on why this is an issue? In the pydoc case, it sounds like an enhancement

[issue43682] Make static methods created by @staticmethod callable

2021-04-12 Thread Mark Shannon
Mark Shannon added the comment: This is a significant change to the language. There should be a PEP, or at the very least a discussion on Python Dev. There may well be a very good reason why static methods have not been made callable before that you have overlooked. Changing static methods t

[issue43682] Make static methods created by @staticmethod callable

2021-04-12 Thread STINNER Victor
STINNER Victor added the comment: Ok, static methods are now callable in Python 3.10. Moreover, @staticmethod and @classmethod copy attributes from the callable object, same as functools.wraps(). Thanks to this change, I was able to propose to PR 25354 "bpo-43680: _pyio.open() becomes a sta

[issue43682] Make static methods created by @staticmethod callable

2021-04-11 Thread STINNER Victor
STINNER Victor added the comment: New changeset 553ee2781a37ac9d2068da3e1325a780ca79e21e by Victor Stinner in branch 'master': bpo-43682: Make staticmethod objects callable (GH-25117) https://github.com/python/cpython/commit/553ee2781a37ac9d2068da3e1325a780ca79e21e -- _

[issue43682] Make static methods created by @staticmethod callable

2021-04-10 Thread STINNER Victor
STINNER Victor added the comment: > Implement __get__ for C functions. Of course it is breaking change so we > should first emit a warning. It will force all users to use staticmethod > explicitly if they set a C function as a class attribute. We can also start > emitting warnings for all ca

[issue43682] Make static methods created by @staticmethod callable

2021-04-10 Thread Serhiy Storchaka
Serhiy Storchaka added the comment: > Do you see a way to make C functions and Python functions behave the same? Implement __get__ for C functions. Of course it is breaking change so we should first emit a warning. It will force all users to use staticmethod explicitly if they set a C functi

[issue43682] Make static methods created by @staticmethod callable

2021-04-09 Thread STINNER Victor
STINNER Victor added the comment: New changeset 507a574de31a1bd7fed8ba4f04afa285d985109b by Victor Stinner in branch 'master': bpo-43682: @staticmethod inherits attributes (GH-25268) https://github.com/python/cpython/commit/507a574de31a1bd7fed8ba4f04afa285d985109b -- __

[issue43682] Make static methods created by @staticmethod callable

2021-04-09 Thread STINNER Victor
STINNER Victor added the comment: Serhiy: > I concur with Mark Shannon. The root problem is that Python functions and > built-in functions have different behavior when assigned as class attribute. > The former became an instance method, but the latter is not. Do you see a way to make C funct

[issue43682] Make static methods created by @staticmethod callable

2021-04-09 Thread Serhiy Storchaka
Serhiy Storchaka added the comment: Currently pydoc on X.sm gives: --- sm(x, y) A static method --- I concur with Mark Shannon. The root problem is that Python functions and built-in functions have different behavior when assigned as class attribute. The former became an instance method

[issue43682] Make static methods created by @staticmethod callable

2021-04-08 Thread Inada Naoki
Change by Inada Naoki : -- nosy: +methane ___ Python tracker ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python

[issue43682] Make static methods created by @staticmethod callable

2021-04-08 Thread STINNER Victor
STINNER Victor added the comment: There is a nice side effect of PR 25268 + PR 25117: pydoc provides better self documentation for the following code: class X: @staticmethod def sm(x, y): '''A static method''' ... pydoc on X.sm: --- sm(x, y) A static method --- i

[issue43682] Make static methods created by @staticmethod callable

2021-04-07 Thread STINNER Victor
STINNER Victor added the comment: Serhiy Storchaka: > If make staticmethod a calllable and always wrap open, we need to change also > its repr and add the __doc__ attribute (and perhaps other attributes to make > it more interchangeable with the original function). You right and I like this

[issue43682] Make static methods created by @staticmethod callable

2021-04-07 Thread STINNER Victor
Change by STINNER Victor : -- pull_requests: +24003 pull_request: https://github.com/python/cpython/pull/25268 ___ Python tracker ___ __

[issue43682] Make static methods created by @staticmethod callable

2021-04-01 Thread Serhiy Storchaka
Serhiy Storchaka added the comment: If make staticmethod a calllable and always wrap open, we need to change also its repr and add the __doc__ attribute (and perhaps other attributes to make it more interchangeable with the original function). Alternate option: make staticmethod(func) return

[issue43682] Make static methods created by @staticmethod callable

2021-03-31 Thread STINNER Victor
STINNER Victor added the comment: > Isn't the problem that Python functions are (non-overriding) descriptors, but > builtin-functions are not descriptors? > Changing static methods is not going to fix that. > How about adding wrappers to make Python functions behave like builtin > functions a

[issue43682] Make static methods created by @staticmethod callable

2021-03-31 Thread STINNER Victor
STINNER Victor added the comment: > Changing static methods is not going to fix that. My plan for the _pyio module is: (1) Make static methods callable (2) Decorate _pyio.open() with @staticmethod That would only fix the very specific case of _pyio.open(). But open() use case seems to be com

[issue43682] Make static methods created by @staticmethod callable

2021-03-31 Thread Mark Dickinson
Change by Mark Dickinson : -- nosy: +rhettinger ___ Python tracker ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.

[issue43682] Make static methods created by @staticmethod callable

2021-03-31 Thread Mark Shannon
Mark Shannon added the comment: Isn't the problem that Python functions are (non-overriding) descriptors, but builtin-functions are not descriptors? Changing static methods is not going to fix that. How about adding wrappers to make Python functions behave like builtin functions and vice ver

[issue43682] Make static methods created by @staticmethod callable

2021-03-31 Thread STINNER Victor
Change by STINNER Victor : -- title: Make function wrapped by staticmethod callable -> Make static methods created by @staticmethod callable ___ Python tracker ___ ___

[issue43682] Make static methods created by @staticmethod callable

2021-03-31 Thread STINNER Victor
Change by STINNER Victor : -- title: Make function wrapped by staticmethod callable -> Make static methods created by @staticmethod callable ___ Python tracker ___ ___