UML (Unified Modeling Language) — язык рисунков для описания дизайна. Диаграмма — не архивный документ, а средство разговора: она быстро передаёт идею команде и помогает увидеть ошибку до написания кода. Два самых полезных вида: диаграмма классов (структура) и диаграмма последовательностей (поведение).
Блок класса
Класс рисуется прямоугольником из трёх частей: имя, атрибуты, методы. Перед каждым членом стоит знак видимости.
| UML | Значение | В Python |
|---|---|---|
+ | открытый | name |
# | защищённый | _name |
- | скрытый | __name |
Код ниже строит такое описание из класса Python: атрибуты берутся из аннотаций, методы — через inspect.
import inspect
class Account:
owner: str
_balance: float
def __init__(self, owner):
self.owner = owner
self._balance = 0.0
def deposit(self, amount):
self._balance += amount
def _audit(self):
pass
def sign(name):
return "-" if name.startswith("__") else "#" if name.startswith("_") else "+"
def to_uml(cls):
lines = [cls.__name__]
for name, tp in cls.__annotations__.items():
lines.append(f" {sign(name)} {name}: {tp.__name__}")
for name, fn in inspect.getmembers(cls, inspect.isfunction):
if not (name.startswith("__") and name.endswith("__")):
params = ", ".join(list(inspect.signature(fn).parameters)[1:])
lines.append(f" {sign(name)} {name}({params})")
return "\n".join(lines)
print(to_uml(Account))Account
+ owner: str
# _balance: float
# _audit()
+ deposit(amount)