FeaturePython methods/ru: Difference between revisions

From FreeCAD Documentation
No edit summary
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 46: Line 46:
* onBeforeChangeLabel
* onBeforeChangeLabel


==Определение всех доступных Python методов==
==Determining available Python methods==
Within the [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L161-L351 FeaturePython Template Class] exists various <code>imp-><method name>()</code> calls.
В случаях, когда документация к описываемому классу не актуализирована, вы можете самостоятельно определить какие методы доступны в нем , обратившись к исходному C++ коду. Например в [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L161-L351 классе шаблоне FeaturePython] перечислены различные вызовы, в виде: <code>imp-><название метода>()</code>.


Каждому из них соответствует аналогичный метод доступный в Python.
Each of these correspond to an available bound Python method.


For example, <code>imp->execute()</code> [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L193 on line 193] means the <code>execute</code> method is available.
К примеру, <code>imp->execute()</code> [https://github.com/FreeCAD/FreeCAD/blob/76e74294894bbce46d006e149315c6274d206278/src/App/FeaturePython.h#L193 в строке 193] означает, что <code>execute</code> метод доступен в Python коде.


Note, <code>getPyObject()</code> and <code>init()</code> are special-cases and don't follow the above heuristic.
Обратите внимание, что <code>getPyObject()</code> и <code>init()</code> являются особыми случаями и не подлежат подобному способу определения.


==Смотрите также==
==Смотрите также==

Latest revision as of 18:27, 5 December 2022

Other languages:

Введение

Данная страница содержит справочные данные по доступным переопределяемым методам примененных в описаниях: Create a FeaturePython object part I и Программируемые объекты.

Основная ссылка

Указанные ниже методы в ~ 99% случаев применяются опытными пользователями proxy классов Python.

execute(self, obj) Вызывается во время перерасчета FeaturePython (или пересчета всего документа) Не вызывайте recompute() из этого метода (или любого метода, вызываемого из execute()), поскольку это вызовет повторный пересчет, что может привести к зацикливанию.
onBeforeChange(self, obj, prop) Вызывается перед тем, как значение свойства будет изменено prop - название изменяемого свойства, но не сам объект свойства. Изменение свойства не может быть отменено. Будущее/текущее значение свойства не доступны для сравнения одновременно.
onChanged(self, obj, prop) Вызывается после того, как значение свойства было изменено prop - название свойства, которое подлежит изменению, но не сам объект свойства.
onDocumentRestored(self, obj) Вызывается после восстановления документа или копирования объекта FeaturePython. Иногда ссылки на объект FeaturePython из класса или класс из объекта FeaturePython могут быть нарушены, так как класс __init__() метод не вызывается при реконструкции объекта. Добавление self.Object = obj или obj.Proxy = self как правило решает эти проблемы.

Нередко можно столкнуться с ситуацией, когда обратные вызовы (callbacks) Python запускаются не так, как следовало бы. Начинающие в этой области могут быть уверены, что система обратного вызова FeaturePython не является хрупкой или сломанной. Неизменно, когда обратные вызовы не выполняются, это происходит из-за того, что ссылка потеряна или не определена в базовом коде. Однако, если кажется, что обратные вызовы прерываются без объяснения причин, предоставление ссылок на объекты/proxy ссылки в обратном вызове onDocumentRestored() (как указано в первой таблице выше) может облегчить эти проблемы. Пока вы не освоитесь с системой обратного вызова, может быть полезно добавлять инструкции вывода в консоль print() в каждый обратный вызов для вывода сообщений в консоль в процессе разработки.

Дополнительные методы

Приведенные ниже методы предназначены для продвинутого применения proxy классов Python, как правило в большинстве случаев они вам не понадобятся.

  • mustExecute
  • getViewProviderName
  • getSubObject
  • getSubObjects
  • getLinkedObject
  • hasChildElement
  • isElementVisible
  • canLinkProperties
  • allowDuplicateLabel
  • redirectSubName
  • canLoadPartial
  • onBeforeChangeLabel

Определение всех доступных Python методов

В случаях, когда документация к описываемому классу не актуализирована, вы можете самостоятельно определить какие методы доступны в нем , обратившись к исходному C++ коду. Например в классе шаблоне FeaturePython перечислены различные вызовы, в виде: imp-><название метода>().

Каждому из них соответствует аналогичный метод доступный в Python.

К примеру, imp->execute() в строке 193 означает, что execute метод доступен в Python коде.

Обратите внимание, что getPyObject() и init() являются особыми случаями и не подлежат подобному способу определения.

Смотрите также