Предположим, мне нужно создать собственную небольшую DSL, которая будет использовать Python для описания определенной структуры данных. Например. Я хотел бы, чтобы иметь возможность написать что-то вродеPython __setattr__ и __getattr__ для глобальной области?
f(x) = some_stuff(a,b,c)
и есть Python, вместо того, чтобы жаловаться необъявленных идентификаторов или попытки вызвать функцию some_stuff, преобразовать его в буквальном выражении для моего дальнейшего удобства.
можно получить разумное приближение к этому, создав класс с надлежащим переопределены __getattr__
и __setattr__
методы и использовать его следующим образом:
e = Expression()
e.f[e.x] = e.some_stuff(e.a, e.b, e.c)
Было бы здорово, если бы, если бы можно было получить избавиться от раздражающего «э». префиксы и, возможно, даже избегать использования []. Поэтому мне было интересно, возможно ли каким-то временно «переопределить» глобальные поисковые запросы и назначения? В соответствующей заметке, может быть, есть хорошие пакеты для легкого достижения такой «цитирующей» функциональности для выражений Python?
"раздражающий" e. "Префиксы"? Они кажутся абсолютно необходимыми для понимания того, что происходит. Если 'some_stuff' не является функцией, а является секретным методом анонимного объекта, я не понимаю, как кто-то может научиться его использовать. –
Ну, научиться использовать это является не связанным с этим вопросом соответствующей документации.Обратите внимание, что в моем примере some_stuff __not__ ссылается также на существующую функцию объекта «выражение» - он будет «создан динамически» с помощью '__getattr__'. То, что я в основном ищу, - это способ создания сексуального синтаксического сахара, который может заменить такие вещи, как, например, 'add_new_formula (['f', 'x'], ['some_stuff', 'a', 'b' 'c']) 'чем-то более читаемым. В одном из ответов упоминается Sage, посмотрите, как он использует измененный синтаксис Python для живого примера. –
@KT: Ваши различные примеры по всей карте. Один предполагает слишком много, у одного может быть слишком много ненужных ссылок на объекты на один и тот же объект, а у другого слишком много цитат и скобок. Есть ли что-нибудь, что вы можете предоставить, чтобы показать рабочий пример того, что вы пытаетесь сделать со стандартными классами объектов? Не могли бы вы опустить гиперболу? Не могли бы вы предоставить рабочие классы, чтобы мы могли упростить синтаксис? –