+2  A: 
Luper Rouch
This is a great idea, thank you! However there's still a problem: on your example, if (for any reason) I decide to remove `register(SomeChoice)`, all (key,class) pairs will be changed. But I need a *unique* and *permanent* key for each class. Actually the question should be: is there any way to create a unique key (natural number, non zero) for a class ?
You could adapt the registration pattern to store the registry in a file and generate a new ID only if a class was never seen before, indexing the classes by their module name + name (and taking care of concurrency problems)... Or you could write `# Don't touch!` above the register() calls ;)
Luper Rouch
I'm a lazy guy, so for the moment I will use the second choice. Thank you very much for your help. :)
A: 

What's the value of the SomeChoice and AnotherChoice classes? Why not just store the keys and values in a dictionary (kind of link CHOICES in your SomeModel) and have one new class that just represents a choice,

class UserChoice:
    def __init__(self, id, name):
        self.id = id
        self.name = name

and then you get the same functionality of your SomeChoice and AnotherChoice, but if you add more choices, you don't need more classes. Maybe your example was just over-simplified, but I don't see the value of those classes. Sorry if I missed the point completely.

Tom