2.4. UML Class Diagram¶
2.4.1. Attributes¶
>>> class Astronaut:
... firstname: str
... lastname: str
```mermaid
classDiagram
class Astronaut {
firstname: str
lastname: str
}
```

2.4.2. Methods Without Parameters¶
>>> class Astronaut:
... def say_hello(self):
... pass
```mermaid
classDiagram
class Astronaut {
say_hello()
}
```

2.4.3. Methods With Parameters¶
>>> class Astronaut:
... def say_hello(self, firstname: str, lastname: str):
... pass
```mermaid
classDiagram
class Astronaut {
say_hello(firstname: str, lastname: str)
}
```

2.4.4. Method Return Type¶
>>> class Astronaut:
... def say_hello(self) -> str:
... pass
```mermaid
classDiagram
class Astronaut {
say_hello() str
}
```

2.4.5. Abstract Methods¶
>>> from abc import abstractmethod, ABCMeta
>>>
>>>
>>> class Astronaut(metaclass=ABCMeta):
... @abstractmethod
... def say_hello(self):
... pass
```mermaid
classDiagram
class Astronaut {
say_hello()*
}
```

2.4.6. Static Methods¶
>>> class Astronaut:
... @staticmethod
... def say_hello():
... pass
```mermaid
classDiagram
class Astronaut {
say_hello()$
}
```

2.4.7. Types¶
>>> class Astronaut:
... firstname: str
... lastname: str
...
... def say_hello(self, name: str) -> str:
... pass
```mermaid
classDiagram
class Astronaut {
firstname: str
lastname: str
say_hello(name: str) str
}
```

2.4.8. Access Modifiers¶
+
- Public-
- Private#
- Protected~
- Package/Internal
2.4.9. Access Modifiers - Public¶
>>> class Astronaut:
... firstname: str
... lastname: str
...
... def say_hello(self) -> str:
... pass
```mermaid
classDiagram
class Astronaut {
+firstname: str
+lastname: str
+say_hello() str
}
```

2.4.10. Access Modifiers - Protected¶
>>> class Astronaut:
... _firstname: str
... _lastname: str
...
... def _say_hello(self) -> str:
... pass
```mermaid
classDiagram
class Astronaut {
#firstname: str
#lastname: str
#say_hello() str
}
```

2.4.11. Access Modifiers - Private¶
>>> class Astronaut:
... __firstname: str
... __lastname: str
...
... def __say_hello(self) -> str:
... pass
```mermaid
classDiagram
class Astronaut {
-firstname: str
-lastname: str
-say_hello() str
}
```

2.4.12. Boxes and Arrows¶

2.4.13. Use Cases¶









2.4.14. Django¶
GraphViz + Dot
Django Extensions: https://django-extensions.readthedocs.io/en/latest/graph_models.html


2.4.15. Generate from code¶
sphinx.ext.graphviz
(fromsphinx
) - https://www.sphinx-doc.org/en/master/usage/extensions/graphviz.htmlpyreverse
(frompylint
) - https://www.logilab.org/blogentry/6883GraphModels
(fromdjango-command-extensions
) - https://code.google.com/p/django-command-extensions/wiki/GraphModelsepydoc
- http://epydoc.sourceforge.net - http://epydoc.sourceforge.net/api/epydoc.apidoc.VariableDoc-class.htmlpynsource
- http://pynsource.com/lumpy
- http://www.greenteapress.com/thinkpython/swampy/lumpy.htmlObjectDomain
- http://www.objectdomain.com/products/od-featuresargouml-python
- http://argouml-python.tigris.org/pywebuml
- https://bitbucket.org/tzulberti/pywebumluml-to-django
- https://github.com/auvipy/uml-to-djangoPython Vipera
- https://sourceforge.net/projects/pythonvipera/gaphor
- https://github.com/gaphor/gaphor
$ pyreverse -o png -p mymodule .