Classes in a class: how to access variables from one in another
Chris Rebert
clp2 at rebertia.com
Mon Oct 18 12:34:07 EDT 2010
On Mon, Oct 18, 2010 at 8:58 AM, Andreas Waldenburger
<usenot at geekmail.invalid> wrote:
> On Mon, 18 Oct 2010 17:17:52 +0200 Christian Heimes <lists at cheimes.de>
> wrote:
>
>> [snip]
>> Don't nest classes. Just don't. This might be a valid and good
>> approach in some programming languages but it's not Pythonic.
>
> Explain!
"Private" classes that are closely related to another class can be
simply be defined at the module level with an appropriate name
indicating the privacy (e.g. _Private vs. Public) rather than inside
their associated class; this saves on indentation and is thus more
pleasant to read.
Also, Python's scoping rules, particularly for class-level scopes,
don't work the way programmers from languages where nested classes are
common would expect:
class Foo(object):
SHARED_CONSTANT = 42
class FooBar(object):
def baz(self):
return SHARED_CONSTANT
Foo.FooBar().baz()
==>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in baz
NameError: global name 'SHARED_CONSTANT' is not defined
Since you must use Foo.SHARED_CONSTANT and similar anyway when you're
in FooBar, nesting FooBar within Foo doesn't really confer any
advantages in the conciseness department.
Cheers,
Chris
--
http://blog.rebertia.com
More information about the Python-list
mailing list