Из одного класса в другой перебросить переменную [дубликат]
У меня есть один класс A, в нем есть функция. Есть другой класс B, в нем есть функция. Если быть более точным, то мне нужно открыть доступ к переменным из одного класса в другом, так, чтобы не использовать метод global , возможно ли?
![]()
Используйте наследование. Вот как:
![]()
Расширять Root стоит от Tk или от Frame
Ваши классы совершенно независимы, поэтому, содержимое поля ввода проще передать через lambda функцию, задав аргумент
Это сразу создаст объект класса и вызовет метод
Я закомментировал всё, что связано с изображениями, чтобы код можно было запустить везде. Верните тогда то, что нужно
Передача переменной из одного экземпляра класса в другой с использованием Python?
У меня проблемы с передачей переменной, определенной в одном экземпляре класса, в другой экземпляр класса. Я относительно новичок в использовании классов, но, насколько я понимаю, переменные можно передавать из одного экземпляра в другой, просто определяя их как часть экземпляра класса (например, в следующем примере). Несмотря на то, что я использовал эту модель в прошлом, я никогда не пытался сделать это, используя графический интерфейс, такой как wxPython .
У меня проблема в том, что экземпляр wxPython предопределен и не принимает никаких дополнительных параметров (что позволяет мне передавать только такие вещи, как title, size и т. Д.) В экземпляр класса.
Другая проблема, с которой я сталкиваюсь, это то, что я пытаюсь передать переменную на три класса глубже, вызывая диалоговое окно, и из диалога я вызываю отдельный класс, предназначенный для запуска рабочего потока.
Итак, мои вопросы:
Как передать переменную из экземпляра первого класса в экземпляр третьего класса?
Как я могу переопределить экземпляр wxPython для определения дополнительных переменных?
ИЛИ Можно ли создать собственный обработчик событий для передачи необходимых данных?
Я использую Python и хотел бы думать, что я понимаю основы программирования с использованием Classes и GUI с такими фреймворками, как Tkinter и wxPython (используется в этом проекте). Я написал основной класс / экземпляр, который получает некоторые данные от пользователя, и я хотел бы иметь возможность передавать информацию, хранящуюся в self.main_instance_var, и передавать ее во второй класс / экземпляр (в данном случае диалоговое окно Progress Dialog звонили из первого класса.
Когда я попытался использовать вышеупомянутую модель в моем диалоге прогресса, я получил очень неинформативную синтаксическую ошибку («не ключевое слово arg после ключевого слова arg»). Предотвращение дальнейшей передачи переменной из диалогового окна Progress в рабочий поток. Если бы я получил исключение, это было бы одно, но синтаксическая ошибка, я не понимаю. Посмотрите ниже для краткого примера:
[Python][Вложенные классы] Доступ к полю внешнего класса из внутреннего
При написании кода появилась такая проблема, есть код следующего вида:

Я правильно понимаю, что ты хочешь иметь доступ к полю несуществующего объекта?

Нет почему, объект очень даже существующий и в __init__ как раз и идет определение var.
Нет почему, объект очень даже существующий
Ну дык скажи об этом вложенному классу.
Не путать поля класса и поля объекта.

Мм так а как? Просто я передаю классы, а не объекты, методу одной библиотеки.

Афтар, иди учить основы ООП.
на SO нашел вариант когда вложенному классу передается объект внешнего
Правильный, годный вариант.
но такая реализация в моем случае не возможна к сожалению
Мои соболезнования, но без наличия объекта ты не сможешь получить доступ к его полям, что какбэ очевидно.

Мм так а как? Просто я передаю классы, а не объекты, методу одной библиотеки.
Если объектов не существует, то к чему ты доступ собрался получать?


Тебя не смущает, что ты неявно передал внутреннему объекту ссылку на внешний? Аффтар говорил, что его это не устраивает.

Объекты существуют, но создаются они кодом библиотеки. На Java то что нужно реализуемо так:

На Java то что нужно реализуемо так:
Эээ. и ссылку на что возвращает выражение OuterClass.this, если не создано ни одного объекта класса OuterClass или, если создано несколько объектов?

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

Так если InnerClass создан, создан и OuterClass же.

если бы в Bar передавалась ссылка на Foo::self, какой бы смысл тогда был делать его вложенным? а то что якобы «на Жава реализуемо так» вообще бред

тогда в чем косяк моего решения?

Так если InnerClass создан, создан и OuterClass же.
не путай классы и объекты. если даже InnerClass создан, как узнать какой именно объект OuterClass’а его создал? ты просто запутался и хочешь странного, давай ка ты нам всю задачу опишешь..

На Java то что нужно реализуемо так:
А теперь говори, зачем тебе это нужно в питоне.

А пусть var будет полем объекта класса а не экземпляра класса, и будет все щастье.
Так если InnerClass создан, создан и OuterClass же.

если бы в Bar передавалась ссылка на Foo::self, какой бы смысл тогда был делать его вложенным?
Я не. я не не знаю, что сказать на это и вообще что-то перестал понимать смысл происходящего в теме.
Думаю, топикстартеру просто нужно уяснить, что тот факт, что один класс вложен в другой, совсем НЕ означает, что вложенный класс будет автоматически инстанцироваться вместе с родительским или что экземпляр вложенного класса будет иметь ссылку на экземпляр родительского класса.

Ты не понимаешь почему хочешь странного, потому что не понимаешь как выполняется этот код. Как создается класс? Считывается его определение, оттуда выдергивается его его имя, базовые классы, и, если есть, метакласс. Потом выполняется тело класса (тело класса — это код, расположенный на один уровень отступа правее объявления класса, то есть оператора «class . ») в отдельном локальном неймспейсе класса (по сути это прообраз будущего __dict__ класса), а затем вся эта солянка (имя класса, базовые классы + полученный неймспейс) передается в метакласс, который должен вернуть готовый класс. Напоследок в неймспейсе, в котором расположено объявление класса, создается переменная с именем класса и туда помещается ссылка на этот объект(класс). Так вот метод __init__ инициализирует экземпляры уже _готового_ класса. А класс InnerClass создается в момент создания класса OuterClass, когда ещё и класса нет, а тем более его экземпляров. То есть вложенные классы создаются раньше классов, в которые вложены. Походу ты перевел код на Java на Python один в один, не учитывая специфики последнего.
Походу ты перевел код на Java на Python один в один, не учитывая специфики последнего.
Жабовский код тоже не заработает.

Вобщем то да, отоспался и пересмотрел немного код, в итоге удалось переписать проще и наверное более правильно. Всем спасибо, действительно видимо пока что не до конца понимаю ООП.
Python-сообщество
Хочу увидеть переменную self.mlba объявленную в классе application в классе show_edit… Подскажите как?
class show_edit:
def __init__(self):
dt=date_int()
self.date=StringVar()
selection=self.mlba.curselection() # здесь не видит переменную из класса application
….
class application:
“”“Основной класс программы”“”
def init_spisok(self):
self.mlba=multi.MultiListbox(tk,((ru(‘Тип’), 7),(ru(‘Дата’), 11), (ru(‘Отделение’), 37), (ru(‘№ док-та’), 7))
self.mlba.grid(row=1,column=0)
…
def __init__(self):
self.init_spisok()
self.init_niz()
#2 Апрель 20, 2010 06:30:43
Не передается self в другой class
А почему он ее должен видеть если она принадлежит другому классу? Передайте mlba в show_edit явно, например при создании его экземпляра.
ЗЫ: Имена классов принято писать с БольшойБуквыИВКэмеллСтиле 😉
Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…
#3 Апрель 20, 2010 06:49:17
Не передается self в другой class
#4 Апрель 20, 2010 06:59:46
Не передается self в другой class
Я не вижу в приведенном куске где у вас создается экземпляр show_edit, но что то типа такого:
Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…
#5 Апрель 20, 2010 07:02:45
Не передается self в другой class
class show_edit:
def __init__(self):
dt=date_int()
self.date=StringVar()
self.mapp=application(self) # ошибка : __init__() takes exactly 1 argument (2 given)
selection=self.mlba.curselection() # здесь не видит переменную из класса application
….
class application:
“”“Основной класс программы”“”
def init_spisok(self):
self.mlba=multi.MultiListbox(tk,((ru(‘Тип’), 7),(ru(‘Дата’), 11), (ru(‘Отделение’), 37), (ru(‘№ док-та’), 7))
self.mlba.grid(row=1,column=0)
…
def init_niz(self):
self.edit_but=Button(self.niz_fr,text=ru(‘Редактировать’),
font=(“Arial”, 10, “bold”),command=lambda:show_edit(self),
width=20)
def __init__(self):
self.init_spisok()
self.init_niz()
не увидела вашего сообщения еще, сейчас попробую
Отредактировано (Апрель 20, 2010 07:05:03)
#6 Апрель 20, 2010 07:20:00
Не передается self в другой class
Ну вот поправьте __init__ для show_edit и вот эту строчку
Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…
#7 Апрель 20, 2010 07:42:24
Не передается self в другой class
Спасибо
здесь к сожалению дает ошибку __init__() takes exactly 2 arguments (3 given)