Простая ошибка класса связи Python? - PullRequest
1 голос
/ 10 ноября 2011

Привет, у меня проблемы с передачей переменных / выполнением функций из других классов,

Прямо сейчас у меня что-то вроде этого,

class 1(3):
    def hi():
       print 'class 1'

class 2(3):
    def hi2():
       print 'class 2'

class 3:
    def hi3():
       print 'class 3'

Допустим, из класса 1 я хотел бы выполнить функцию из класса 2, как мне это сделать?

Я уже некоторое время гуглю это и не добился большого успеха (кроме поиска изображений змей)

Любая помощь с этой проблемой будет принята с благодарностью

Ответы [ 3 ]

2 голосов
/ 10 ноября 2011

если для класса 3 нужны функции как из класса 1, так и из класса 2, вы можете выполнить двойное наследование:

class one:
    def funct1(self):
        print 'I am defined in class one'
    self.data1 = "one"

class two:
    def funct2(self):
        print 'I am defined in class two'
    self.data2 = "two"

class three(one, two):
    def funct3(self):
        print 'I am defined in class three'
    self.data3 = "three"

тогда любой объект, созданный в третьем классе, сможет вызывать funct1, funct2 и funct3. Также этот объект будет иметь собственную версию self.data1, self.data2 и self.data3.

ob_3 = three()
ob_3.data1

печатает 'один'

ob_3.funct1()

печатает 'Я определен в первом классе'

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

class one:
    def funct1(self):
        print 'class one'

class two(one):
    def funct2(self):
        one.funct1(self)

ob2 = two()
ob2.funct2()

печатает «первый класс»

надеюсь, это поможет!

2 голосов
/ 10 ноября 2011

1 не имеет доступа к методам 2;2 находится в другой цепочке наследования.

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

0 голосов
/ 10 ноября 2011

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

Почему вы пытаетесь это сделать?

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