[Python-3000] Traits/roles instead of ABCs

Giovanni Bajo rasky at develer.com
Mon Apr 30 14:43:26 CEST 2007

On 30/04/2007 3.40, Collin Winter wrote:

> The mechanism I'm most familiar with for solving this problem (which,
> unless I've missed something, is, "how do I make sure this object does
> what I expect?") is Perl 6's roles system; if you know about Squeak
> Smalltalk's "traits" system, you're on the same page.

+1. I like those, *specifically* the fact that they can be dynamic (you can 
"add" a role to a class or an instance of a class and "remove" it later). This 
is basically mixins they way they should be done.

> The idea is that we leave the traditional class system to manage an
> object's implementation and use a more-or-less orthogonal system to
> manage that same object's behavior.

Yes. In other words, traditional inheritance is very good for *reusing* an 
implementation, but it's not very flexible for defining behaviour. It works 
for basic cases of course, but gets limited fast when your object network gets 
more complex.

> 2. I gave a strawman syntax proposal for runtime role composition
> above (modulo the method name): "Ring.done_by(int)" or
> "int.does(Ring)". (Perl 6 speaks in terms of "an object/class *does* a
> role".) Perl 6 also allows individual instances to do different roles
> than their class does, but I'm not sure we want to go that far.

Well, I do! I know there have been times I have needed it badly, and when 
you're there there's little you can do. If you want to champion a "role" 
proposal for Python, please don't forget about this.
Giovanni Bajo

More information about the Python-3000 mailing list