Найти - Пользователи
Полная версия: Классы
Начало » Python для новичков » Классы
1 2 3 4
Kasta_neda
Добрый день.
Есть несколько классов, вызываю функции из одного класса в другом.
Появилась проблема, вызываю функцию первого класса из второго, но self присваивается из второго класса, как вернуть ссылку на экземпляр (self ) первого класса ?
Или как вызвать функцию первого класса правильно, если я не могу во втором классе объявить класс
 cl = ClassName()

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

 ClassName.func_name(args)
AD0DE412
чет очень путано … типа что cl.func_name(args) не работает
Kasta_neda
AD0DE412
cl.func_name(args) не работает
Работает, но в этой функции, есть свои атрибуты которые принадлежат первому классу, и соответственно не находит их.
 def  func_name(self, args):
    self.out = self.sklad()
marvellik
если у вас что то не получается, значить ваш код очень плохой. пересмотрите алгоритм или скиньте код сюда что бы что то понять из вашего вопроса.
Kasta_neda
Примерно так
 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)# если нажали, передаем данные 
            
xam1816
 [quote=Kasta_neda]def zip_out(  dat, *args, **kwargs):[/quote]

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

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

skl? или sklad_list?
Romissevd
 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)
AD0DE412
Kasta_neda
но в этой функции, есть свои атрибуты которые принадлежат первому классу, и соответственно не находит их.

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

зы я тоже из новичков поэтому плжст поправте ежеле че не так
PEHDOM
Kasta_neda вообще это дичь, вызывать из одного класса методы другого, подставляя инстас первого, (если конечно они не родственники ). Если вам такое приходиться делать значит у вас очень, ну очень плохая архитектура, подумайте лучше как поменять архитектуру вашей программы, чтобы этого не нужно было делать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB