Thanks for the 'splainer, Nath*a*n, and to Johan for letting me hijack the thread.
Den On Wed, Nov 18, 2015 at 3:16 PM, Nathan Rusch <nathan_ru...@hotmail.com> wrote: > Not exactly. The `nuke.Group` class implements both the .begin()/.end() > methods *and* the context manager interface. In other words, there are no > node types that have .begin()/.end() methods but will not work as context > managers. > > The basic inheritance tree for all of Nuke's Python node classes looks > like: > > nuke.Node > |- nuke.Viewer > `- nuke.Group # This class is where .begin()/.end() are defined > |- nuke.Gizmo > |- nuke.Root > `- nuke.Precomp > > Because `nuke.Gizmo`, `nuke.Root`, and `nuke.Precomp` all inherit > `nuke.Group`, they all have the same group-related methods available (in > addition to any they define themselves). > > Now, as far as using the methods vs. a with statement, it ultimately comes > down to personal preference. However, the `with` statement is considered > more "Pythonic," in that it is more concise and handles the call to .end() > automatically "on the way out". > > -Nathan > > > *From:* Den Serras <denserras...@gmail.com> > *Sent:* Wednesday, November 18, 2015 12:16 PM > *To:* Nuke Python discussion <nuke-python@support.thefoundry.co.uk> > *Subject:* Re: [Nuke-python] nuke.zoom and in group button > > Thanks, Nathin! So, if I understand correctly, the only advantage to > "group.begin()" over "with group" is that group.begin() will work with > classes that don't have __enter__ and __exit__. How often does that > actually happen? I prefer the *with *because it's shorter and easier to > visually parse, but I want to play it safe. > > Den > > On Wed, Nov 18, 2015 at 12:29 AM, Igor Majdandzic < > subscripti...@badgerfx.com> wrote: > >> Thanks Nathan, >> very interesting insight. >> >> >> Am 17.11.2015 um 19:32 schrieb Nathan Rusch: >> >> These two snippets are pretty much functionally identical: >> >> with group: >> # Do something... >> >> # ------ >> >> group.begin() >> try: >> # Do something... >> finally: >> group.end() >> >> >> The `with`statement works with objects that implement Python's context >> manager protocol ( >> https://docs.python.org/2/reference/datamodel.html#with-statement-context-managers >> ). >> >> Basically, if a class implements __enter__ and __exit__ methods, it can >> be used as the context manager in a `with` statement. When the block inside >> the `with` statement begins, the context manager's .__enter__() method is >> called, and when the block exits, the context manager's .__exit__() method >> is called unconditionally (even if an exception occurs in the block). >> >> When using a Group node as a context manager, its .begin() method will be >> called by .__enter__(), and .end() will be called by .__exit__(). Thus, >> this is redundant: >> >> with group: >> group.begin() >> # Do something... >> group.end() >> >> It's worth noting that Nuke currently always returns the current context >> to the root node when a group context is exited, rather than to whatever >> context it was in before the context was changed to the group, though this >> is logged as a bug. >> >> Hope that helps. >> >> -Nathan >> >> >> *From:* Justin GD <j.grosde...@gmail.com> >> *Sent:* Tuesday, November 17, 2015 9:58 AM >> *To:* Nuke Python discussion <nuke-python@support.thefoundry.co.uk> >> *Subject:* Re: [Nuke-python] nuke.zoom and in group button >> >> Hi all, >> >> That's a good question; >> I've been using the *with *statement as well with success. >> >> I'm curious of what is the best method. >> >> Cheers, >> Justin >> >> 2015-11-17 17:24 GMT+00:00 Den Serras <denserras...@gmail.com>: >> This leads to a slightly tangential discussion... I used to always use: >> >> with group: >> (inner node stuff) >> >> which generally seemed to work; but so many people use begin() that now I >> play it safe and do: >> >> with group: >> group.begin() >> (inner node stuff) >> group.end() >> >> But perhaps someone can explain what the theoretical and functional >> differences are between "with group" and "group.begin()", and whether by >> combining them I'm causing even more problems... >> >> Thanks! >> Den >> >> On Tue, Nov 17, 2015 at 1:29 AM, Johan Forsgren <j.a.forsg...@gmail.com> >> wrote: >> Root().begin() worked wonderfully, I had actually no idea that it existed >> at all, thanks! >> >> >> 2015-11-16 18:05 GMT+01:00 Mike Frank <michaeljfr...@gmail.com>: >> nuke.Root().begin() >> >> >> >> _______________________________________________ >> Nuke-python mailing list >> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ >> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python >> >> >> >> _______________________________________________ >> Nuke-python mailing list >> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ >> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python >> >> >> ------------------------------ >> _______________________________________________ >> Nuke-python mailing list >> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ >> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python >> >> >> _______________________________________________ >> Nuke-python mailing listnuke-pyt...@support.thefoundry.co.uk, >> http://forums.thefoundry.co.uk/http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python >> >> >> >> _______________________________________________ >> Nuke-python mailing list >> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ >> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python >> >> > > ------------------------------ > _______________________________________________ > Nuke-python mailing list > Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python > > > _______________________________________________ > Nuke-python mailing list > Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python > >
_______________________________________________ Nuke-python mailing list Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python