object() can't have attributes

Irmen de Jong irmen.NOSPAM at xs4all.nl
Wed Dec 23 10:49:33 EST 2015


On 23-12-2015 13:58, Chris Angelico wrote:
> On Wed, Dec 23, 2015 at 11:46 PM, Neal Becker <ndbecker2 at gmail.com> wrote:
>> Sometimes I want to collect attributes on an object.  Usually I would make
>> an empty class for this.  But it seems unnecessarily verbose to do this.  So
>> I thought, why not just use an Object?  But no, an instance of Object
>> apparantly can't have an attribute.  Is this intentional?
> 
> Yes; there are other uses of object() that benefit from being
> extremely compact. You can use types.SimpleNamespace for this job, or
> you can create the empty class as you're describing. (Chances are you
> can give the class a meaningful name anyway.)
> 
> ChrisA
> 

Hey, nice, didn't know about SimpleNamespace. I was about to suggest
collections.namedtuple but that one is probably more than Neal asked for.

Alternatively, you can still put attributes on a function, so this works as well (but I
think it's rather ugly):

thing = lambda: None
thing.attr = 42
vars(thing)   #  {'attr': 42}


-irmen




More information about the Python-list mailing list