Форум сайта python.su
Добрый день.
Есть несколько классов, вызываю функции из одного класса в другом.
Появилась проблема, вызываю функцию первого класса из второго, но self присваивается из второго класса, как вернуть ссылку на экземпляр (self ) первого класса ?
Или как вызвать функцию первого класса правильно, если я не могу во втором классе объявить класс
cl = ClassName()
ClassName.func_name(args)
Офлайн
чет очень путано … типа что cl.func_name(args) не работает
Отредактировано AD0DE412 (Май 24, 2020 13:41:18)
Офлайн
AD0DE412Работает, но в этой функции, есть свои атрибуты которые принадлежат первому классу, и соответственно не находит их.
cl.func_name(args) не работает
def func_name(self, args): self.out = self.sklad()
Офлайн
если у вас что то не получается, значить ваш код очень плохой. пересмотрите алгоритм или скиньте код сюда что бы что то понять из вашего вопроса.
Офлайн
Примерно так
class TestNavigationDrawer(MDApp):#BoxLayout x = NumericProperty(0) y = NumericProperty(15) def __init__(self, **kwargs): super(TestNavigationDrawer, self).__init__(**kwargs) self.sklad_list = None def application_data(self): # экран который запрашивает данные по sklad() data = self.sklad() ..... def sklad(self, *args): #формируется словарь с данными # dict_out self.sklad_list = dict_out def zip_out( dat, *args, **kwargs): skl = self.sklad_list#при использовании внутри этого класса, из других методов, видит, из другого класса не видит и self не пойму как вернуть .... class SelectableLabel(RecycleDataViewBehavior, Label): ''' Add selection support to the Label ''' index = None selected = BooleanProperty(False) selectable = BooleanProperty(True) def __init__(self, **kwargs): super(SelectableLabel, self).__init__(**kwargs) def refresh_view_attrs(self, rv, index, data): ''' Catch and handle the view changes ''' self.index = index return super(SelectableLabel, self).refresh_view_attrs( rv, index, data) def on_touch_down(self, touch): ''' Add selection on touch down ''' if super(SelectableLabel, self).on_touch_down(touch): return True if self.collide_point(*touch.pos) and self.selectable: return self.parent.select_with_touch(self.index, touch) def apply_selection(self, rv, index, is_selected): ''' Respond to the selection of items in the view. ''' self.selected = is_selected if is_selected: dat = rv.data[index] print("selection changed to {0}".format(dat)) TestNavigationDrawer.zip_out( dat, index)# если нажали, передаем данные
Отредактировано Kasta_neda (Май 24, 2020 17:15:41)
Офлайн
[quote=Kasta_neda]def zip_out( dat, *args, **kwargs):[/quote]
def on_touch_down(self, touch):
Офлайн
Kasta_neda
#при использовании внутри этого класса, из других методов, видит, из другого класса не видит
Офлайн
class A: val = 1 def __init__(self, num): self.num = num def method(self): print('result => ', self.num + self.val) class B: def __init__(self, num): self.num = num A(self.num).method() b = B(3)
Офлайн
Kasta_neda
но в этой функции, есть свои атрибуты которые принадлежат первому классу, и соответственно не находит их.
Отредактировано AD0DE412 (Май 25, 2020 09:56:55)
Офлайн
Kasta_neda вообще это дичь, вызывать из одного класса методы другого, подставляя инстас первого, (если конечно они не родственники ). Если вам такое приходиться делать значит у вас очень, ну очень плохая архитектура, подумайте лучше как поменять архитектуру вашей программы, чтобы этого не нужно было делать.
[code python][/code]
Офлайн