Как получить доступ к self.function из области глобального класса

Как передать обратный вызов Foo.finished в doSmthAsync. Можно ли как-то получить доступ к себе при определении doSmthAsync(callback=self.finished).

import doSmthAsync from library

class Foo:
    doJob = doSmthAsync(callback=self.finished)

    def finished():
        pass

Для тех, кто предложит реконструировать код: я знаю много хитростей, как это исправить. Но вопрос в доступности self при определении doSmthAsync(callback=self.finished).

Я запутался. Вы хотите получить доступ к объекту Foo() из обратного вызова? Здесь может пригодиться Минимальный, полный и проверяемый пример.

Alex 09.11.2018 15:59

почему бы не передать self в качестве параметра doSmthAsync? Затем вы можете получить доступ к self и всем его атрибутам и методам.

Mike Scotty 09.11.2018 15:59

@Alex Я не буду передавать self.finished в функцию doSmthAsync ext.

Yuriy Gyerts 09.11.2018 16:06

@Mike Scotty, но self в данный момент недоступен (момент, когда я пытаюсь его использовать)

Yuriy Gyerts 09.11.2018 16:07

может быть, сделать это в __init__, а не на уровне класса?

Sam Mason 09.11.2018 16:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

FWIW, внутри блока операторов class сам объект класса еще даже не существует - он создается только после выполнения оператора class - поэтому нет возможности ссылаться на класс из оператора класса. Но на самом деле в этом нет необходимости, вы можете получить прямой доступ к функции finished (да, я сказал «функция», потому что на данный момент это простая функция, см. Ссылку выше) из блока оператора класса - по крайней мере, один раз функция было определено:

class Foo(object):

    def finished(self):
        pass

    print("finished : {}".format(finished)

Я не знаю, что должен делать doSmthAsync, поэтому невозможно опубликовать правильное питоническое решение вашей проблемы, но его, безусловно, можно решить с помощью свойства или настраиваемого дескриптора - или даже простого метода FWIW.

Я принял ваш ответ, но что означают слова: IOW, FWIW, cf?

Yuriy Gyerts 09.11.2018 23:17

"другими словами", "чего стоит", "см. также"

bruno desthuilliers 10.11.2018 09:50

Другие вопросы по теме