Python dynamic attribute creation

Ethan Furman ethan at stoneleaf.us
Fri Jun 25 14:38:22 EDT 2010


WANG Cong wrote:
> On 06/25/10 15:34, Bruno Desthuilliers <bruno.42.desthuilliers at websiteburo.invalid> wrote:
> 
>> WANG Cong a écrit :
>>> Hi, list!
>>>
>>> I have a doubt about the design of dynamic attribute creation by
>>> assignments in Python.
>>>
>>> As we know, in Python, we are able to create a new attribute of
>>> a class dynamically by an assignment:
>>>
>>>>>> class test: pass
>>> ... 
>>>>>> test.a = "hello"
>>>>>> test.a
>>> 'hello'
>>>
>>> However, I still don't get the points why Python designs it like this.
>>>
>>> My points are:
>>>
>> (snip)
>>
>> Python's classes are plain objects, and like any other object are
>> created at runtime. Having to special-case them would break the
>> simplicity and uniformity of Python for no good reason. Just like
>> there's no good reason to make setattr() working differently for class
>> and non-class objects.
>>
> 
> For implementaiton, perhaps, but not for the language design, how could
> a language design be perfect if we can use setattr() like assignments
> while use other things, e.g. delattr(), not? Is there any way to express
> delattr() as simple as expressing setattr() with assignments? I doubt...

 >>> del test.a
 >>> test.a
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
AttributeError: class test has no attribute 'a'

Looks pretty simple to me...

~Ethan~



More information about the Python-list mailing list