using an instance of Object as an empty class
Ulrich Eckhardt
ulrich.eckhardt at dominolaser.com
Wed Jun 29 10:58:06 EDT 2011
Peter Otten wrote:
> Examples for classes that don't accept attributes are builtins
> like int, tuple, and -- obviously -- dict. You can make your own
> using the __slot__ mechanism:
>
>>>> class A(object):
> ... __slots__ = ["x", "y"]
> ...
>>>> a = A()
>>>> a.x = 42
>>>> a.y = "yadda"
>>>> a.z = 123
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> AttributeError: 'A' object has no attribute 'z'
Wow. This is something I've been missing dearly in my toolbox until now!
Typically, when in C++ I would have used a struct, I always created a class
that set the according attributes in the init function instead, which is
quite a bit more cumbersome. Or I used a tuple and hoped to get the position
of the elements correct.
Now, follow-up question:
1. The slots are initialized to None, right? Or are they just reserved? IOW,
would "print a.x" right after creation of the object print anything or raise
an AttributeError?
2. Is there a convenient syntax to init an instance of such a class? Can I
convert it from e.g. a dict or do I still have to write a constructor or
manually fill in the slots?
Thank you!
Uli
--
Domino Laser GmbH
Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932
More information about the Python-list
mailing list