Need help with Python scoping rules

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Thu Aug 27 10:07:46 CEST 2009


Ulrich Eckhardt a écrit :
(snip)

> Now, what actually causes problems is that 'fact_rec' is not universally
> accessible until class 'Demo' is fully defined, but you need this in order
> to fully define it. Here comes a drawback of the dynamic nature of Python,
> that the declaration phase (compiling) is not separate from the execution.

It is. You can manually compile a module, remove the source .py and 
still import (or execute) the compiled .pyc.

The "problem" here is not with compilation, but with the fact that 
'class' (and 'def') statements are *executable* statements. IOW, the 
class statement is executed when encountered, that is, usually (most 
class statements being top-level statements), when the module is first 
loaded.


> I fully agree that this case is rather vexing to my (and obviously your)
> biased brain. I wouldn't call this a bug before fully understanding why
> e.g. you can not access a class before its definition is finished.

Nor why it's a GoodThing(tm) for quite a lot of use case - while the 
OP's problem is in the splitting-hairs category - only a problem if yoçu 
insist in imposing your views on the language instead of learning how to 
use it.

> Suggestion: someone mentioned that you should make the function a normal
> function. 
(snip)

Someone (Diez Roggisch IIRC) also mentionned a simple solution that 
mostly fulfills the OP's desires: use a nested function.



More information about the Python-list mailing list