Наследование классов через несколько классов - PullRequest
1 голос
/ 16 февраля 2010

У меня есть 3 класса, и я запускаю первый класс, объявляю переменную во втором классе и хочу, чтобы 3-й класс мог распечатать эту переменную. У меня есть код ниже, чтобы объяснить это более четко.

from class2 import Class2
class Class1(Class2):

    def __init__(self):
        self.value1 = 10
        self.value2 = 20


    def add(self):
        self.value3 = self.value1 + self.value2

    def multiply(self):
        Test.subtract()

if __name__ == '__main__':
    Class1 = Class1()
    Class1.add()
    Class1.Multiply()

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

from class3 import Class3
class Class2(Class3):

    def e(self):
        self.value4 = self.value3 - self.value2
        print self.value4
        self.string1 = 'Hello'
        Class2.printValue()

Class2 = Class2()

Функции 3-го класса вызываются 2-м классом, но значения 2-го класса не передаются в 3-й класс.

class Class3():

    def printValue(self):
        print self.string1

if __name__ == '__main__':
    Class3 = Class3()

Поэтому мой вопрос заключается в том, как получить переменные во втором классе для передачи в 3-й класс, когда я запускаю первый класс в качестве основного сценария?

Спасибо за любую помощь.

Этот скрипт только для примера, в моем скрипте у меня есть 3 файла. Мне нужно начать с 1-го класса в файле, а затем использовать функции 2-го класса, которые, в свою очередь, создают переменную, которую я затем использую при запуске функции в 3-м классе. Но все это нужно выполнить, выполнив первый класс. Все занятия должны быть в отдельных файлах.

Извините за путаницу, спасибо

Я могу сделать это, когда просто использую функции, передав значение через такой параметр, как:

string1 = 'Hello'
printValue(string1)

Тогда это значение может использоваться функцией printValue во время работы. Я просто не могу заставить его работать с классами, так как передача параметров кажется проблемой из-за self.

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

Трудно понять, что вы пытаетесь сделать, потому что ваш код даже не запускается. Я думаю, что-то вроде этого вы пытаетесь сделать:

class Class3():

    def printValue(self):
        print self.string1

class Class2(Class3):

    def e(self):
        self.value4 = self.value3 - self.value2
        print self.value4
        self.string1 = 'Hello'
        self.printValue()

class Class1(Class2):

    def __init__(self):
        self.value1 = 10
        self.value2 = 20

    def add(self):
        self.value3 = self.value1 + self.value2


if __name__ == '__main__':
    instance1 = Class1()
    instance1.add()
    instance1.e() # will print "10" and "Hello"
    print instance1.value3 # will print "30"
0 голосов
/ 16 февраля 2010

Я бы предложил:

File1

class Class3:
    def __init__(self):
        #I'd really like to do self.string1 = "" or something concrete here.
        pass

    def printValue(self):
        #Add exception handling
        #self may not have a `string1`
        print self.string1

File2

from File1 import Class3

class Class2(Class3):
    def __init__(self):
        Class3.__init__(self)
        self.string1 = 'Hello'

    def e(self):
        self.value4 = self.value3 - self.value2
        print self.value4
        self.printValue()

file3

from File2 import Class2

class Class1(Class2):
    def __init__(self):
        Class2.__init__(self)
        self.value1 = 10
        self.value2 = 20

    def add(self):
        self.value3 = self.value1 + self.value2


if __name__ == '__main__':
    obj1 = Class1()
    #The order of calling is important! value3 isn't defined until add() is called
    obj1.add()
    obj1.e()
    print obj1.value3

Я предположил полное отсутствие множественного наследования [Используйте super (), если вам нужен кооператив MI + google: почему супер Python считается вредным!] В общем, ответ Труппо может быть именно тем, что вам нужно. Мой ответ просто указывает на то, что, по моему очень субъективному мнению, является лучшим способом достичь того, что вам нужно. Я бы также предложил использовать новые классы стилей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...