Best reference that I know of: "Traits: A Mechanism for Fine-grained Reuse" by:


Inheritance is well-known and accepted as a mechanism for reuse in object-oriented languages. Unfortunately, due to the coarse granularity of inheritance, it may be difficult to decompose an application into an optimal class hierarchy that maximizes software reuse. Existing schemes based on single inheritance, multiple inheritance, or mixins, all pose numerous problems for reuse. To overcome these problems we propose traits, pure units of reuse consisting only of methods. We develop a formal model of traits that establishes how traits can be composed, either to form other traits, or to form classes. We also outline an experimental validation in which we apply traits to refactor a non-trivial application into composable units.

Note that there are several packages already in PyPI:

(Never used them myself).


On Fri, Feb 7, 2020 at 6:04 PM Soni L. <> wrote:

On 2020-02-07 1:33 p.m., Nick Timkovich wrote:
On Fri, Feb 7, 2020 at 10:11 AM Soni L. <> wrote:
I'd like to see traits some day, with a syntax similar to this one:
if the trait isn't used in the function definition you get the raw
object, where name conflicts between traits (but not between traits and
inherent methods) result in an error about name conflicts. otherwise you
get a friendly wrapper.

I assume traits are a feature of another language, but not being familiar with it can you illustrate its need a bit better? Can you give an example in current Python, and how it could be made more clear with the notional trait syntax?


Hello Nick!

Traits are an alternative to Multiple Inheritance. They solve the problem of name conflicts by making them an ambiguity error and requiring you to disambiguate (at call site).
Python-ideas mailing list --
To unsubscribe send an email to
Message archived at
Code of Conduct:

Stefane Fermigier - - -
Founder & CEO, Abilian - Enterprise Social Software -
Chairman, National Council for Free & Open Source Software (CNLL) -
Founder & Organiser, PyParis & PyData Paris -