Metaprogramming#
The framework uses a significant amount of runtime metaprogramming in which properties and methods are swapped out or constructed at the last minute based on plugin information. This list shows some of the aspects of the Python language that are used to achieve this:
decorators (used everywhere,
qiime2.sdk.action:Actionis really just a decorator-object)descriptor protocol (used in
qiime2.core.util:LateBindingAttribute)import hooks (used by Artifact API)
metaclasses (used by
qiime2.plugin.model.directory_format)eval (
qiime2.skd.util:parse_typeanddecoratorpackage for signature rewriting)