2016-01-29 1 views
1

Мое программное обеспечение поддерживает python для автоматизации задач (майя). Когда я отменяю или повторяю в этом программном обеспечении, он печатает последнюю команду, к сожалению, для Python это адрес памяти функции, а не что-то действительно полезное. Таким образом, пользователь видит выход Undo: <functools.partial object at 0x000002235DEDDF48> вместо того, чтобы что-то на самом деле полезное как Undo: Set Key on something at frame xPython: нужен результат functools.partial (function), который будет известен как что-то еще.

Там кажется, нет никакого выбора, чтобы сделать Майя напечатать полезный результат внутри его собственной функциональности, так что теперь я хочу спросить, если есть какая-то непонятным образом беги с python, чтобы этот экземпляр назвал себя чем-то полезным, чтобы программное обеспечение печаталось, надеясь, что это не мешает функциям. Я попробую что-нибудь в этот момент!

def testFunc(): 
    pass 

test = partial(testFunc) 

результаты испытаний в <functools.partial object at 0x000002235DEA95E8>

Если кто-то может думать о более точном названии, пожалуйста, редактировать/предложить.

+0

Что конкретно оно печатает? Значение последнего выражения? Некоторая конкретная переменная? –

+3

Вы можете определить «неполный» подкласс, который печатает более удобную идентификацию, определяя '__repr __()'. Где он получит эту идентификацию? – kindall

+0

@kindall, это был правильный ответ или привел меня к этому. Если я частично подкласса, я могу «def __repr __ (self): return result» и ответить на ваш вопрос, он получает идентификацию из 'def __init __ (self, * args):' вызывал до '__repr __()' и берет его из 'self.result = args [-1]' поэтому, если я вызываю 'mypartial (function, arg1, arg2, arg3, extraarg4)', то extraarg4 становится этим идентификатором. – Vii

ответ

2

Благодаря любезному предоставлению мне руководства в комментариях я смог найти ответ. Подкласс partial и определение __repr__() является ключевым.

захватывая *args на __init__() и хранить его как self.result мы можем использовать его на __repr__() вернуть последний аргумент, данное *args в результате данной Майей при использовании Undo/Redo.

class rpartial(partial): 
    def __init__(self, *args): 
     self.result = args[-1] 
    def __repr__(self): 
     return self.result 

rpartial(function, arg1, arg2, undoredo) 

Строка дано rpartial на последней строке для undoredo является то, что будет напечатано Майей при использовании Undo/Redo.