@@ -213,21 +213,39 @@ class Colour(str):
213213 :type stack: :class:`~typing.List`\[:class:`str`\]
214214 :param reset: The escape sequence to reset the style.
215215 :type reset: :class:`str`
216+ :param name: A friendly name for the style.
217+ :type name: :class:`str`
216218
219+ .. versionchanged:: 1.10.0 Added ``name`` parameter.
217220 .. autosummary-widths:: 7/16
218221 """
219222
220- __slots__ = ("style" , "reset" , "stack" )
223+ __slots__ = ("style" , "reset" , "stack" , "name" )
221224
222225 style : str
223226 reset : str
224227 stack : Union [Deque [str ], List [str ]]
228+ name : str
225229
226- def __new__ (cls , style : str , stack : Union [Deque [str ], List [str ]], reset : str ) -> "Colour" : # noqa: D102
230+ def __repr__ (self ) -> str :
231+ if self .name :
232+ return f"<Colour({ super ().__repr__ ()} , name={ self .name !r} )>"
233+ else :
234+ return f"<Colour({ super ().__repr__ ()} )>"
235+
236+ def __new__ ( # noqa: D102
237+ cls ,
238+ style : str ,
239+ stack : Union [Deque [str ], List [str ]],
240+ reset : str ,
241+ * ,
242+ name : Optional [str ] = None ,
243+ ) -> "Colour" :
227244 self = super ().__new__ (cls , style ) # type: ignore[import]
228245 self .style = style
229246 self .stack = stack
230247 self .reset = reset
248+ self .name = name # Friendly name
231249
232250 return self
233251
@@ -460,7 +478,7 @@ def __init_subclass__(cls, **kwargs) -> None: # noqa: PRM002
460478 for name in dir (cls ):
461479 if not name .startswith ('_' ):
462480 value = getattr (cls , name )
463- setattr (cls , name , Colour (code_to_chars (value ), cls ._stack , cls ._reset ))
481+ setattr (cls , name , Colour (code_to_chars (value ), cls ._stack , cls ._reset , name = name ))
464482
465483 def __new__ (cls : Type [_AC ], * args , ** kwargs ) -> Type [_AC ]: # noqa: D102
466484 return cls
0 commit comments