On Apr 1, 6:46 am, Ethan Furman <et...@stoneleaf.us> wrote: > Greetings! > > Perhaps I woke up too early this morning, but this behaviour has me baffled: > > Python 3.1.1 (r311:74483, Aug 17 2009, 17:02:12) [MSC v.1500 32 bit > (Intel)] on win32 > Type "help", "copyright", "credits" or "license" for more information. > > --> test = object() > > --> setattr(test, 'example', 123) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > AttributeError: 'object' object has no attribute 'example' > > Shouldn't setattr() be creating the 'example' attribute? Any tips > greatly appreciated! >
On 2.6.2 the error seems to be limited to instances of object. If you subclass object, you are fine. I do not know why that is so; I'm just verifying that the behavior you see is not limited to 3.1.1. Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class Foo(object): pass ... >>> test = Foo() >>> setattr(test, 'example', 123) >>> test.example 123 >>> test = object() >>> setattr(test, 'example', 123) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'object' object has no attribute 'example' It's probably good to subclass object anyway, with something like: class Record(object): pass But I do not know your use case. -- http://mail.python.org/mailman/listinfo/python-list