Vedran Čačić <ved...@gmail.com> added the comment:

That "except AttributeError" approach is a powerful bug magnet, since it can 
very easily mask real attribute errors stemming from misspelled attribute names 
in the __post_init__ call itself. What you should _really_ do is

    def __post_init__(self):
        with contextlib.suppress(AttributeError):
            post_init = super().__post_init__
        post_init()

But of course, nobody will ever write that.

Raymond in his "super considered super" video 
(https://youtu.be/xKgELVmrqfs?t=2068) says the right thing to do is to make 
your own root which knows exactly what classes it manages, and drops the 
supercalls from them (after possibly verifying that all kwargs have actually 
been used and so on).

But in case of dataclasses, usually any class can serve as such a root, and the 
main reason people use dataclasses is to avoid boilerplate code. So I think it 
would be a nice compromise.

----------
nosy: +veky

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue46757>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to