хранение несвязанного Python функционирует в объекте класса

Кроме того, Swiss Mister post, в моем случае window.open был запущен внутри обещания, который включил блокировку всплывающих окон, мое решение было: в угловом:

$scope.gotClick = function(){

  var myNewTab = browserService.openNewTab();
  someService.getUrl().then(
    function(res){
        browserService.updateLocation(res.url, myNewTab);

    }
  );
};

browserService:

this.openNewTab = function(){
     var newTabWindow = $window.open();
     return newTabWindow;
}

this.updateTabLocation = function(tabLocation, tab) {
     if(!tabLocation){
       tab.close();
     }
     tab.location.href = tabLocation;
}

так вы можете открыть новую вкладку с помощью ответа на обещание и не вызвать блокировщик всплывающих окон.

16
задан Thomi 30 November 2008 в 10:11
поделиться

4 ответа

data.fn = staticmethod(myFunction)

должен добиться цели.

25
ответ дан 30 November 2019 в 21:29
поделиться

То, что можно сделать:

d = foo.data()
d.fn = myFunction

d.fn(1,2,3)

, Который не может быть точно, что Вы хотите, но действительно работает.

1
ответ дан 30 November 2019 в 21:29
поделиться

Это кажется бессмысленным мне. Почему не просто называют myFunction, когда Вам нужен он?

В целом, в Python, мы используем модули для этого вида пространства имен (контрастируйте это с Java, где у Вас просто нет выбора). И конечно, myFunction уже связывается с пространством имен модуля при определении его.

Это обсуждено несколько в ответах на этот вопрос.

0
ответ дан 30 November 2019 в 21:29
поделиться

Благодаря Andre для ответа - настолько простой!

Для тех из Вас, кто заботится, возможно, я должен был включать весь контекст проблемы. Здесь это так или иначе:

В моем приложении, пользователи могут записать плагины в Python. Они должны определить функцию с четко определенным списком параметров, но я не хотел налагать любые соглашения о присвоении имен по ним.

Так, пока пользователи пишут функцию с корректным количеством параметров и типов, все, что они должны сделать, что-то вроде этого (помните, это - сменный код):

# this is my custom code - all plugins are called with a modified sys.path, so this
# imports some magic python code that defines the functions used below.
from specialPluginHelperModule import *

# define the function that does all the work in this plugin:
def mySpecialFn(paramA, paramB, paramC):
    # do some work here with the parameters above:
    pass

# set the above function:
setPluginFunction(mySpecialFn)

вызов к setPluginFunction берет функциональный объект и устанавливает его в скрытом объекте класса (наряду с другим связанным со сменной конфигурацией материалом, этот пример был упрощен несколько). Когда главное приложение хочет выполнить функцию, я использую runpy модуль, чтобы выполнить сменный код и затем извлечь упомянутый выше объект класса - это дает мне данные конфигурации и сменную функцию, таким образом, я могу выполнить его чисто (не загрязняя мое пространство имен).

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

0
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: