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:Action
is 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_type
anddecorator
package for signature rewriting)