Я думаю, что у вас есть правильная идея здесь
wrapped_apis = [OriginalApi(), OriginalApi()]
for wrapped_api in wrapped_apis:
wrapped_api.do_something(1, 2, True)
Вы можете определить свой класс-обертку, наследуя из list
, а затем обрабатывать вызовы API для его элементов, как только он будет создан.
class WrapperClass(list):
def __init__(self, api_type):
self.api_type = api_type
for func in dir(api_type):
if callable(getattr(api_type, func)) and not func.startswith("__"):
setattr(self, func, lambda *args, **kwargs:
[getattr(o, func)(*args, **kwargs) for o in self])
w = WrapperClass(OriginalApi)
o1, o2 = [OriginalApi()]*2
w.append(o1)
w.append(o2)
print(w.do_something(1, 2, True))
# [None, None]
print(w[0].b)
# 12
print(w[1].b)
# 12
print(o1.b)
# 12
Здесь я перебираю каждый метод в вашем классе API и создаю метод в классе-обертке, который применяет свои аргументы ко всем своим элементам списка. Затем он возвращает понимание списка, состоящее из результатов.
Излишне говорить, что вам, вероятно, следует проверить тип нового объекта, добавляемого к этому WrapperClass
, например,
def append(self, item):
if not isinstance(item, self.api_type):
raise TypeError('Wrong API type. Expected %s'.format(self.api_type))
super(WrapperClass, self).append(item)
Я слышал, что было приобретено новое финансирование для стороны .NET, но на данный момент оно велико и продолжает расти расстояние от «производства готово» или даже «годен к употреблению». Не было регистрации, которая бы в течение долгого времени содержательно затрагивала сторону .NET.
Обновление 15 января 2010: Недавнее сообщение в один из списков scala.
От: Lukas Rytz
В пт, 15 января 2010 в 03:18, Нафтоли Гугенхайм написал:
Не уверен, что это то, что вы ищете, но я думаю, что H2 может быть запущен на
.NET, согласно его документации / веб-сайту.
Если вы ищете механизм базы данных, запрограммированный в Scala, лично я
ничего не слышал, но это ничего не значит.
Если вы имеете в виду ОРМ и т.д., есть несколько. Вы можете использовать Lift Mapper даже в
не-лифтовое приложение (просто включите webkit и util jars IIRC).
Каков статус Scala в .NET?
Мы работаем над загрузкой компилятора и исправляем ошибки MSIL-Backend-Bugs. EPFL предоставит компилятор, работающий на .NET (который использует IKVM.OpenJDK.Core.dll, по крайней мере, в первой версии).
Сейчас у нас есть кросс-компилятор, работающий на JVM, и уменьшенная версия scala. -library.jar, который работает в .NET.
В некоторых частях мы будем полагаться на сообщество (например, перенести больше scala-library.jar в .NET).
Lukas
Статья в Википедии утверждает:
Существует альтернативная реализация для платформы .NET, но она не имеет были в курсе. (требуется цитирование)
Раздел «1120314» «Ограничения» часто задаваемых вопросов содержит следующую запись:
Работает ли Scala с .Net?
Да, текущий дистрибутив Scala можно скомпилировать программу для .Net Платформа. Платформа .Net имеет много сходство с Java, но оно также имеет многие идиосинкразии, делая поддержание этого порта является сложным задача. MSIL / .Net версия Scala реализует на этом этапе практически весь язык Scala, и большинство стандартные библиотеки. Один значительный ограничение заключается в том, что структурные типы делают еще не работает на .NET. Там еще может быть проблемы при использовании особенно сложные обработчики исключений. Маленький количество библиотек недоступно из-за особенностей .Net, и взаимодействие с другими .Net языки не поддерживаются. Для дальнейшего подробности, пожалуйста, обратитесь к этому (возможно, немного устаревший) страница документации.
В руководстве по использованию Scala с .NET говорится о версии 1.4, которая к настоящему времени устарела. С другой стороны, похоже, что документация была написана совсем недавно, в 2008 году, включая страницу «Scala на .NET: причуды» , которая звучит довольно важно.
Сам не имея никакого опыта, она Похоже, что поддержка хромает, но порт .NET на самом деле не первоклассный гражданин. Тот факт, что Scala в .NET (по сравнению с версией Java) не вызывает «ажиотажа», также не внушает оптимизма. Это не похоже на то, что я хотел бы использовать в настоящее время для коммерческого программного обеспечения. Конечно, возможно, что это хорошо, и просто не хорошо продается. Если вы действительно заинтересованы в этой идее, я бы попросил список рассылки .
На данный момент - нет, не совсем, что очень жаль, так как это довольно забавный язык.
Программы типа "Hello world", хорошо - даже такие необычные трюки, как написание простого стека, в котором небольшой фрагмент Python (тот же код под Jython или IronPython) управляет тем же фрагментом Scala.
Что-нибудь умеренно обременительное - компиляция scalac-net может и будет бросать, даже если код не t использовать что-либо за пределами пространства имен scala, а также создает и передает довольно исчерпывающий набор модульных тестов на JVM. Он может сопротивляться построению даже довольно простых сборок (даже если он построен с использованием .net 1.0, чтобы соответствовать низкой спецификации mscorlib, включенной в пакет scala-msil).
Мои наборы тестов для "умеренно сложных" включают следующие реализации предназначены для компенсации текущих недостатков в. BigInteger ( из codeplex , с моими собственными модульными тестами)
Если посмотреть на репозиторий SVN, в пространстве .net определенно наблюдается некоторая активность. В 2.7.x
был каталог dotnet-library
, но он отсутствовал в 2.8.x
и стволе
. Вместо этого есть каталог msil
, в котором совсем недавно, 4 месяца назад, от rytz происходили некоторые нетривиальные вещи.
Вся доступная документация кажется устаревшей, но, возможно, стоит спросить одного из основных участников, каков текущий статус. Обратите внимание, что импровизированный (который, как уже ответил на этот вопрос более года назад), похоже, является одним из них.
По состоянию на Scala Days 2010 в апреле, Мигель Гарсия работал над Scala.NET. Я полагаю, что он работает над плагином для visual studio, и я не уверен, насколько далеко продвинулись его работы, однако вы можете найти свидетельства его работы здесь:
http://lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/ http://www.sts.tu-harburg.de/people/mi.garcia/ScalaCompilerCorner/MixedSourceScalaCSharp.pdf http://www.sts.tu-harburg.de/people/mi.garcia/ScalaCompilerCorner/ScalaNetLearnsLINQTricks.pdf
Сейчас Мигель занимается постдоком в EPFL: http://lamp.epfl.ch/~magarcia/
Ответ Пола (extempore), вероятно, содержит более свежую информацию, но если бы мне было интересно, я мог бы спросить Мигеля напрямую.