[Python-Dev] LOAD_NAME & classes
Michael Gilfix
mgilfix@eecs.tufts.edu
Tue, 23 Apr 2002 13:05:14 -0400
On Tue, Apr 23 @ 12:43, Tim Peters wrote:
> Just FYI, "local()" in Perl is very old, and has always used dynamic scoping
> rules. If you don't wrap local() around a vrbl decl, you get a global vrbl
> instead, and that's also very old. What's relatively new is the "my()" vrbl
> wrapper, which asks for a lexically scoped vrbl. What's very new is
> "our()", which I still haven't figured out:
>
> An "our" declares the listed variables to be valid globals within
> the enclosing block, file, or eval. That is, it has the same scoping
> rules as a "my" declaration, but does not create a local variable. If
> more than one value is listed, the list must be placed in parentheses.
> The our declaration has no semantic effect unless "use strict vars"
> is in effect, in which case it lets you use the declared global
> variable without qualifying it with a package name. (But only within
> the lexical scope of the our declaration. In this it differs from
> "use vars", which is package scoped.)
>
> Anyone want to make a motion that we not ape Perl's scoping rules <wink>?
The our is akin to declaring something static in C. Except in
Perl, it can apply to an enclosure as well since you can build funcs
dynamically. Yay. I think python's scoping rules work just fine :)
Has there ever been a discussion about some easy or straight-forward
way of sharing a global instance across modules? For example, in a
gui app, you might want to structure the program such that there's a
global instance app (main.app) of the application that other modules
might want to query. I was never to happy with importing main and then
using main.app... I felt like I wanted to qualify it as a global, like:
from main import global app
-- Mike
--
Michael Gilfix
mgilfix@eecs.tufts.edu
For my gpg public key:
http://www.eecs.tufts.edu/~mgilfix/contact.html