In <[email protected]> Dave Angel
<[email protected]> 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