Hi, all. I am implementing PEP 597. During review, Victor suggested to deprecate `OpenWrapper`. `OpenWrapper` is defined only for compatibility between C function and Python function:
``` from _pyio import open as py_open from _io import open as c_open class C: py_open = py_open c_open = c_open C().c_open("README.rst") # works C().py_open("README.rst") # TypeError: expected str, bytes or os.PathLike object, not C ``` So builtin open is not io.open, but io.OpenWrapper in Python 3.9. Making staticfunction callable fixes this issue. ``` @staticfunction def open(...): ... ``` Now open defined in Python behaves like C function. We don't need OpenWrapper anymore. This has already been committed by Guido's approval. staticmethod is callable, and OpenWrapper is just an alias of open and deprecated in master branch. But Mark Shannon said we shouldn't make such a change without discussing at python-dev. I don't know we *should*, but I agree that it is *ideal*. Then, does anyone oppose this change? Histrically, this idea had been rejected once. bpo-20309 proposed making classmethod and staticmethod callable. https://bugs.python.org/issue20309 It had been rejected by: "I don't agree that this is a bug that should be fixed. It adds code that will likely never get called or needed (i.e. there has never been a request for this in the decade long history of desciptors and it seems like a made up requirement to me. " https://bugs.python.org/issue20309#msg240843 "actually supporting this would mean adding code that would need to be maintained indefinitely without providing a compensating practical benefit," https://bugs.python.org/issue20309#msg240898 But status is changed now. We already have OpenWrapper. It proves callable classmethod is "called and needed". Although there is only one use case, we can remove more code than adding. staticmethod.__call__() is simple C function. https://github.com/python/cpython/pull/25117/files#diff-57bc77178b3d6f1010dd924722c87522f224d93bc341f0e46c0945094124d8f2 Victor removed OpenWrapper class already, and we can remove `DocDescripter` too. https://github.com/python/cpython/pull/25354/files#diff-bcdfa9cbb0764d7959cda48f9084d79785f87c5ad7460f27ba2678b0bda76e38R314-L327 I think maintenance burden of staticmethod.__call__() is not higher than OpenWrapper and DocDescripter. Additionally, if we have same issue in other module, we can just use staticmethod, instead of copy&paste OpenWrapper and DocDescripter. So it provides "compensating practical benefit". Regards, -- Inada Naoki <songofaca...@gmail.com> _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/MGQMXSMQIPI5ZKS2T5YHNM47PPWSSRD5/ Code of Conduct: http://python.org/psf/codeofconduct/