Вот изображение, показывающее активность области Python (версия 3.6 и целевой x64):
Объем Python
Основная проблема заключается в связи между обоими методами вызова Python, первый используется для запуска объекта класса, а второй — для доступа к методу этого класса. Вот изображение первого вызова свойств Python:
Вызвать метод инициализации Python
И вызов активности getNumberPlusOne:
Вызвать метод Python getNumberPlusOne
Выполняемый код Python:
class ExampleClass:
def __init__(self,t,n):
self.text = t
self.number = n
def getNumberPlusOne(self):
return (self.number+1)
И, наконец, ошибка при выполнении второго метода Invoke Python:
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.InvalidOperationException: Error invoking Python method ----> System.Runtime.Serialization.InvalidDataContractException: Type 'UiPath.Python.PythonObject' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types.
Любая идея о том, где ошибка и как взаимодействовать с выходным объектом, созданным в методе init?






Я считаю, что это занятие было разработано с учетом простых сценариев, а не целых классов. Вот статья на их форуме сообщества, где пользователь Sergiu.Wittenberger подробно рассказывает.
Начнем с действия «Загрузить скрипт Python»:

В моем случае локальная переменная «pyScript» является указателем на объект python, то есть на экземпляр ExampleClass.
Теперь есть действие Invoke Python Method — оно позволяет нам вызывать метод по имени. Однако кажется, что методы класса недоступны для UiPath — вы не можете просто набрать pyScript.MethodName().

Таким образом, кажется, что мы не можем получить доступ к методам класса (пожалуйста, докажите, что я ошибаюсь здесь!), но есть обходной путь, как показано Серхио. В вашем случае вы должны добавить еще один метод вне вашего класса, чтобы получить доступ к вашему объекту или управлять им:
class ExampleClass:
def __init__(self,t,n):
self.text = t
self.number = n
def getNumberPlusOne(self):
return (self.number+1)
foo = ExampleClass("bar", 42)
def get_number_plus_one():
return foo.getNumberPlusOne()
Обратите внимание, что это также означает, что экземпляр объекта создается в том же файле: foo. На данный момент это кажется единственным вариантом взаимодействия с объектом — опять же, я надеюсь, что кто-нибудь сможет доказать, что я ошибаюсь.
Для полноты картины вот результат:

Конечно вещь. Пожалуйста, рассмотрите возможность проверки этого как принятого ответа, если это помогло.
Я хотел бы добавить к тому, что сказал вышеупомянутый пользователь, что вы должны убедиться, что импорт, который вы используете, находится в глобальных пакетах сайта, а не в venv, поскольку у Studio нет доступа к этому.
Кроме того, всегда добавляйте это:
import os
import sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
в начало вашего кода. Опять же, ограничение реализации. (документы здесь: https://docs.uipath.com/activities/docs/load-script)
Делая это, я думаю, вы сможете создавать более сложные структуры, но я не проверял это.
Спасибо Вольфганг, это помогло. Это работает, как вы сказали.