V programování je trait způsob návrhu použitý v objektově orientovaném programování. Trait reprezentuje kolekci metod, které mohou být použity pro rozšíření funkcionalit tříd. Velmi se podobá třídě vytvořené pouze z konkrétních metod, použitých pro rozšíření jiné třídy obdobným způsobem, jako je vícenásobné dědění. Trait však klade důraz na řešení konfliktů názvů za použití podpory samotného programovacího jazyka při následném propojování.
Traity poskytují „jednoduchý konceptuální model pro strukturu objektově orientovaného programování“[1][2] podobný mixinům. Také umožňují jednoduše vytvořit třídy, které opětovně používají chování jiné softwarové komponenty.