empty classes as c structs?

Steven Bethard steven.bethard at gmail.com
Sun Feb 6 14:15:29 EST 2005


Nick Coghlan wrote:
> By assigning to __dict__ directly, you can use the attribute view either 
> as it's own dictionary (by not supplying one, or supplying a new one), 
> or as a convenient way to programmatically modify an existing one. For 
> example, you could use it to easily bind globals without needing the 
> 'global' keyword:
> 
> Py> class attr_view(object):
> ...     def __init__(self, data):
> ...         self.__dict__ = data
> ...
> Py> def f():
> ...   gbls = attr_view(globals())
> ...   gbls.x = 5
> ...
> Py> x
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> NameError: name 'x' is not defined
> Py> f()
> Py> x
> 5

Hmm... interesting.  This isn't the main intended use of 
Bunch/Struct/whatever, but it does seem like a useful thing to have... 
I wonder if it would be worth having, say, a staticmethod of Bunch that 
produced such a view, e.g.:

class Bunch(object):
     ...
     @staticmethod
     def view(data):
         result = Bunch()
         result.__dict__ = data
         return result

Then you could write your code as something like:

gbls = Bunch.view(globals())

I'm probably gonna need more feedback though from people though to know 
if this is a commonly desired use case...

Steve



More information about the Python-list mailing list