classDiagram class Ancestor { attr : str cls_member get_value() set_value(value) } class CustomException { } class DoNothing { } class DoNothing2 { } class DoSomething { my_int : Optional[int] my_int_2 : Optional[int] my_string : str do_it(new_int: int) int } class Interface { get_value()* set_value(value)* } class NullablePatterns { return_nullable_1()* int | None return_nullable_2()* Optional[int] } class PropertyPatterns { prop1 prop2 } class Specialization { TYPE : str relation relation2 top : str from_value(value: int) increment_value() None transform_value(value: int) int } Specialization --|> Ancestor DoNothing --* Ancestor : cls_member DoNothing --* Specialization : relation DoNothing2 --o Specialization : relation2