CONFIG dictionary¶
What’s CONFIG¶
CONFIG
dictionary is a feature of manim, which facilitates the inheritance
and modification of parameters between parent and child classes.
CONFIG
dictionary ‘s processing is in manimlib/utils/config_ops.py
CONFIG
dictionary into class attributes and valuesGenerally, the first line of the .__init__()
method in some basic class (Mobject
, Animation
,
etc.) will call this function digest_config(self, kwargs)
to convert both
the CONFIG
dictionary and kwargs
into attributes. Then it can be accessed
directly through self.
, which simplifies the handling of inheritance between classes.
An example:
There are many class inheritance relationships in manimlib/mobject/geometry.py
# Line 279
class Circle(Arc):
CONFIG = {
"color": RED,
"close_new_points": True,
"anchors_span_full_range": False
}
# Line 304
class Dot(Circle):
CONFIG = {
"radius": DEFAULT_DOT_RADIUS,
"stroke_width": 0,
"fill_opacity": 1.0,
"color": WHITE
}
The Circle
class uses the key-value pair "color": RED
in the CONFIG
dictionary to add the attribute self.color
.
At the same time, the Dot
class also contains the key color
in the
CONFIG
dictionary, but the value is different. At this time, the priority will
modify the attribute self.color
to WHITE
.
CONFIG nesting¶
The CONFIG
dictionary supports nesting, that is, the value of the key is also
a dictionary, for example:
class Camera(object):
CONFIG = {
# configs
}
class Scene(object):
CONFIG = {
"window_config": {},
"camera_class": Camera,
"camera_config": {},
"file_writer_config": {},
# other configs
}
def __init__(self, **kwargs):
digest_config(self, kwargs)
# some lines
self.camera = self.camera_class(**self.camera_config)
The CONFIG
dictionary of the Camera
class contains many key-value pairs,
and this class needs to be instantiated in the Scene
class. For more convenient
control, there is a special key-value pair in the Scene class "camera_config": {}
,
Its value is a dictionary, passed in as kwargs
when initializing the Camera
class
to modify the value of the properties of the Camera
class.
So the nesting of the CONFIG
dictionary essentially passes in the value as kwargs
.