In <mailman.415.1251250004.2854.python-l...@python.org> Dave Angel <da...@ieee.org> writes:
>Stephen Fairchild wrote: >> You are trying to run code in a class that does not exist yet. >> >> def Demo(): >> def fact(n): >> if n < 2: >> return 1 >> else: >> return n * fact(n - 1) >> return type("Demo", (object,), {"fact": staticmethod(fact), "_classvar": >> fact(5)}) >> Demo = Demo() >> >> d = Demo() >> print d._classvar # prints 120 >> print d.fact(7) # prints 5040 >> print Demo # prints <class '__main__.Demo'> >> >> >In all these messages, something I haven't seen pointed out is that >fact() has no self argument. Seems to me that makes it a staticmethod, >so it should be declared that way. No, the fact() function here represents an internal "helper" function. It is meant to be called only once to help initialize a class variable that would be inconvenient to initialize otherwise; this helper function is not meant to be called from outside the class statement. Granted, in the example I gave, the "helper" function (factorial) is a bit silly, but that was just intended as a simple and familiar example of a recursive function. The actual function that motivated this post would be considerably more difficult to explain and would have obscured the point of the post. kynn -- http://mail.python.org/mailman/listinfo/python-list