Add ability for __post_init__ method to be defined.#111
Add ability for __post_init__ method to be defined.#111tbeadle wants to merge 1 commit intopython-attrs:masterfrom
__post_init__ method to be defined.#111Conversation
| names_for_globals[val_name] = a.validator | ||
| names_for_globals[attr_name] = a | ||
| lines.extend([ | ||
| "func = getattr(self, '__post_init__', None)", |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Current coverage is 100% (diff: 100%)@@ master #111 diff @@
====================================
Files 8 8
Lines 466 468 +2
Methods 0 0
Messages 0 0
Branches 105 106 +1
====================================
+ Hits 466 468 +2
Misses 0 0
Partials 0 0
|
| script, globs = _attrs_to_script( | ||
| attrs, | ||
| frozen, | ||
| post_init=hasattr(cls, '__post_init__') |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
hynek
left a comment
There was a problem hiding this comment.
I have added a bunch of comments many of which arguably should have been covered by the contribution guide so I’ve added it to my own todo list to fix that.
If you have problems with Hypothesis, offering candy to @Tinche always helped for me. ;)
Thank you for your contribution! And please remember to ping the ticket once you’re done.
|
|
||
|
|
||
| def _attrs_to_script(attrs, frozen): | ||
| def _attrs_to_script(attrs, frozen, post_init=False): |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
| names_for_globals[val_name] = a.validator | ||
| names_for_globals[attr_name] = a | ||
| if post_init: | ||
| lines.append("self.__post_init__()") |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
| assert C.D.__name__ == "D" | ||
| assert C.D.__qualname__ == C.__qualname__ + ".D" | ||
|
|
||
| def test_post_init(self): |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
| >>> i.y | ||
| [] | ||
|
|
||
| Sometimes, you want to have your class's ``__init__`` method do more than just |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
|
|
||
| - Don't overwrite ``__name__`` with ``__qualname__`` for ``attr.s(slots=True)`` classes. | ||
| `#99 <https://github.com/hynek/attrs/issues/99>`_ | ||
| - Allow for a ``__post_init__`` method that, if defined, will get executed at |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
| self2.z = self2.x + self2.y | ||
|
|
||
| c = C(x=10, y=20) | ||
| assert hasattr(c, 'z') |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
|
|
||
| c = C(x=10, y=20) | ||
| assert hasattr(c, 'z') | ||
| assert c.z == 30 |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
If this method is defined for a class, it will get executed at the end of ``__init__``. Previously, there was no way to extend what was done during ``__init__`` when using ``@attr.s``.
|
Late to the party, but yes absolutely post conversion |
|
I’ve fixed it up so we don’t have ping-pong over minutiae anymore, thank you very much for your contribution! I’ve decided to rename If someone has good arguments against it, feel free to open a new issue before 16.3.0 is out. |
If this method is defined for a class, it will get executed at the end
of
__init__. Previously, there was no way to extend what wasdone during
__init__when using@attr.s.