Classes in a class: how to access variables from one in another
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Mon Oct 18 18:20:14 EDT 2010
On Mon, 18 Oct 2010 17:17:52 +0200, Christian Heimes wrote:
> Don't nest classes. Just don't. This might be a valid and good approach
> in some programming languages but it's not Pythonic. Your code can
> easily be implemented without nested classes.
I'll accept that nested classes are unusual, but unPythonic? Never!
Here's a contrived example:
class K:
class Data(tuple):
def __init__(self, t):
a, b, c = t
self.a = a
self.b = b
self.c = c
def spam(self, a, b, c):
self.data = type(self).Data([a,b,c])
Of course, in Python 2.6 this *specific* example is better written using
namedtuple, but namedtuple is just a factory function for returning a
class!
class K:
# One-liner to create a nested class.
Data = namedtuple("Data", "a b c")
...
Either way, now you can subclass K by changing Data, without exposing
your private, internal classes to the rest of the module:
class K2(K):
class Data(K.Data):
def __init__(self, t):
t = (int(x) for x in t)
super(Data, self).__init__(t)
--
Steven
More information about the Python-list
mailing list