Scripted objects saving attributes/fr

Introduction
Les Objets créés par script sont reconstruits à chaque fois qu'un document au format FCStd est ouvert. Pour ce faire, le document conserve une référence au module et à la classe Python qui ont été utilisés pour créer l'objet, ainsi que ses propriétés.

Les attributs de la classe utilisée pour créer l'objet peuvent également être enregistrés, c'est-à-dire "sérialisés". Ceci peut être contrôlé par les méthodes et  de la classe.

Sauvegarde de tous les attributs
Par défaut, les attributs enregistrés dans une classe d'objets sont ceux du dictionnaire de la classe.

Un objet peut être créé à l'aide de cette classe et il peut être enregistré dans. Si aucun viewprovider particulier n'est attribué au nouvel objet, sa classe proxy est simplement définie sur une valeur différente de, dans ce cas, sur.

Lorsque nous rouvrons le fichier, nous pouvons inspecter le dictionnaire de la classe de l'objet.

Nous voyons que tous les attributs qui commencent par dans la classe ont été sauvegardés. Ceux-ci peuvent être de différents types, notamment chaîne de caractères, liste, flottant et dictionnaire. Le tuple original pour a été converti en liste, mais sinon tous les attributs ont été chargés de la même manière.

Sauvegarde d'attributs spécifiques
Nous pouvons définir une classe similaire à la première, qui implémente des attributs spécifiques à sauvegarder.

La valeur de retour de est l'objet qui sera sérialisé. Il peut s'agir d'une valeur unique ou d'un tuple de valeurs. Lorsque l'objet est restauré, la classe appelle la méthode, en passant la variable avec le contenu sérialisé. Dans ce cas, est un tuple qui est décomposé dans les variables respectives pour reconstruire l'"état" qui existait à l'origine.

We can create an object with this class, and save the document, just like in the previous example. When we re-open the file we can inspect the dictionary of the object's class.

The original tuple for was converted to a list, but otherwise the information was recovered fine. Instead of restoring all attributes like in the previous case, only the attributes that we specified in and  were restored.

Identifying the type
Normally, scripted objects should use properties to store information, as these are automatically restored when the document is opened.

However, sometimes the class restore internal information which is not intended to be modified, but which is helpful to inspect.

For example, most objects of the Draft Workbench set up a attribute that can be used to determine the type of object that is under use.

All objects have a property, but for scripted objects this property is not useful, as it always refers to the parent C++ class, for example, Part_Part2DObject or Part_Feature. Therefore, having this additional attribute in the class is useful to treat each object in a particular way.

Migrating the object
Version information can be stored inside the class in order to verify the origin of an object.

If the structure of the class changes, that is, if its properties or methods change, are renamed, or are removed, we could test the version attribute in order to migrate the older object to a new set of properties or to a new class. This can be done by implementing the method, as explained in Scripted objects migration.

Links

 * Scripted objects
 * Scripted objects migration
 * FreeCAD Forum Discussion: Scripted Object Serialization: json or pickle?


 * obj.Proxy.Type is a dict, not a string, explanation of and  in the forum.
 * The Pickle module in the Python documentation.