Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2020 12:23:49

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Классы

Добрый день.
Есть несколько классов, вызываю функции из одного класса в другом.
Появилась проблема, вызываю функцию первого класса из второго, но self присваивается из второго класса, как вернуть ссылку на экземпляр (self ) первого класса ?
Или как вызвать функцию первого класса правильно, если я не могу во втором классе объявить класс

 cl = ClassName()

могу только метод вызвать

 ClassName.func_name(args)

Офлайн

#2 Май 24, 2020 13:38:50

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Классы

чет очень путано … типа что cl.func_name(args) не работает



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Май 24, 2020 13:41:18)

Офлайн

#3 Май 24, 2020 14:22:17

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Классы

AD0DE412
cl.func_name(args) не работает
Работает, но в этой функции, есть свои атрибуты которые принадлежат первому классу, и соответственно не находит их.
 def  func_name(self, args):
    self.out = self.sklad()

Офлайн

#4 Май 24, 2020 16:51:51

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Классы

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

Офлайн

#5 Май 24, 2020 17:09:00

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Классы

Примерно так

 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)

Офлайн

#6 Май 24, 2020 17:33:08

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  122  -
Профиль   Отправить e-mail  

Классы

 [quote=Kasta_neda]def zip_out(  dat, *args, **kwargs):[/quote]

могу ошибаться,но по мне в скобках нужно дописать self,как допустим
 def on_touch_down(self, touch):

Офлайн

#7 Май 24, 2020 17:34:43

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  122  -
Профиль   Отправить e-mail  

Классы

Kasta_neda
#при использовании внутри этого класса, из других методов, видит, из другого класса не видит

Видит не видит что?

skl? или sklad_list?

Офлайн

#8 Май 24, 2020 19:22:47

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Классы

 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)

Офлайн

#9 Май 25, 2020 09:22:05

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Классы

Kasta_neda
но в этой функции, есть свои атрибуты которые принадлежат первому классу, и соответственно не находит их.

ну так передайте их не знаю через атрибуты (поля) класса (или экземпляра) ну или функцией (опять же гетеры)
ну и как тут было замечено xam1816 у вас вроде как статический метод получается
так же можете как предложил Romissevd использовать переменные класса

зы я тоже из новичков поэтому плжст поправте ежеле че не так



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Май 25, 2020 09:56:55)

Офлайн

#10 Май 25, 2020 10:58:09

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Классы

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version