A
A
Alexander Rublev2016-03-16 02:02:59
Python
Alexander Rublev, 2016-03-16 02:02:59

How to access parent class variable in python?

Hello. I have a stupid question.
I'm trying to change the value of a variable in the parent class when creating class instances. But I don't know how to reach her.
Let me give you a stupid and short example.

class Main:  # основная функция

    def __init__(self):
        self.ab = AB()  # создаем экзмпляр класса с переменными
        d1 = Dialog1()  # Создаем экзэмпляр класса который должен поменять переменную ab.a
        d2 = Dialog2()  # Создаем экзэмпляр класса который должен поменять переменную ab.b

    def sum(self):
        c = self.ab.a + self.ab.b
        print(c)


class Dialog1:
    def __init__(self):
        ab.a = 5  # !!! Пытаюсь поменять значение в переменной созданом в родительском классе Main


class Dialog2:
    def __init__(self):
        ab.b = 6  # !!! Пытаюсь поменять значение в переменной созданом в родительском классе Main


class AB:
    a = 1
    b = 2

m = Main()

Roughly speaking, the sum function should write "11"
I may not have put it right somewhere.
I need this for a PyQt program. I open manually drawn dialog boxes from the main window, in which I request various data, and I want this data to be saved in the main window. (Perhaps you understand me)

Answer the question

In order to leave comments, you need to log in

3 answer(s)
A
Andy_U, 2016-03-16
@Meller008

I didn’t quite understand why you need this, but the minimum fixes are below, and the options for Dialog1 and Dialog2 are different, without additional information I don’t know which is better.

class Main(object):  # основная функция

    def __init__(self):
        self.ab = AB()  # создаем экзмпляр класса с переменными
        d1 = Dialog1(self.ab)  # Создаем экзэмпляр класса который должен поменять переменную ab.a
        d2 = Dialog2(self)  # Создаем экзэмпляр класса который должен поменять переменную ab.b

    def sum(self):
        c = self.ab.a + self.ab.b
        print(c)


class Dialog1(object):
    def __init__(self, parent):
        parent.a = 5  # !!! Пытаюсь поменять значение в переменной созданом в родительском классе Main


class Dialog2(object):
    def __init__(self, parent):
        parent.ab.b = 6  # !!! Пытаюсь поменять значение в переменной созданом в родительском классе Main


class AB(object):
    a = 1
    b = 2

m = Main()

print(m.ab.a)
print(m.ab.b)

M
Maxim Moseychuk, 2016-03-16
@fshp

The parent class implies inheritance. You don't have it.

V
Vov Vov, 2016-03-16
@balamut108

super is super, see the video on this topic for Python 3: pythonz.net/videos/34

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question