Наследование классов - PullRequest
       14

Наследование классов

0 голосов
/ 12 февраля 2010

Я пытаюсь полностью разобраться с наследованием классов в Python. Я создал программу с классами, но все они в одном файле. Я также создал сценарии с несколькими файлами, содержащими только функции. Я начал использовать наследование классов в сценариях с несколькими файлами, и у меня возникают проблемы. У меня есть 2 основных сценария ниже, и я пытаюсь получить второй сценарий для наследования значений из первого сценария. Код следующий:

Первый сценарий:

class test():

    def q():

        a = 20
        return a

    def w():
        b = 30
        return b

    if __name__ == '__main__':
        a = q()
        b = w()

if __name__ == '__main__':
    (a, b) = test()

Второй сценарий:

from class1 import test

class test2(test):

    def e(a, b):
        print a
        print b


    e(a, b)

if __name__ == '__main__':
    test2(test)

Может кто-нибудь объяснить мне, как получить второй файл для наследования значений первых файлов? Спасибо за любую помощь.

Ответы [ 2 ]

13 голосов
/ 12 февраля 2010

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

class Test(object):

    def __init__(self):
        self.a = 20
        self.b = 30

if __name__ == '__main__':
    test_instance = Test()

и

from class1 import Test

class Test2(Test):

    def e(self):
        print self.a
        print self.b


if __name__ == '__main__':
    test_instance = Test2()
    test_instance.e() # prints 20 and 30

Похоже, ваша проблема не только в наследовании, но и как правильно определять классы в Python .

Некоторые заметки:

  • Всегда используйте заглавные буквы для классов. Это более или менее условно.
  • Как указывало ruibm, каждый (нестатический) метод класса должен иметь первый параметр с именем (по соглашению) self.
  • Вы можете создавать переменные экземпляра, устанавливая их как self.variable = value в методе __init__.
  • Если вы позвоните Test(), вы получите объект обратно. Если вы не присвоите его переменной, простой вызов test2(), как вы это делали во втором фрагменте кода, не имеет никакого эффекта. Может быть, в вашем случае, потому что вы определили ваш класс странным образом.
1 голос
/ 12 февраля 2010

В Python каждая функция-член (метод) класса должна иметь переменную с именем self, которая в значительной степени является указателем / ссылкой this в C ++, Java, C #.

В основном, чтобы ваш код работал, добавьте self в качестве первого аргумента ко всем методам. Чтобы назначить / прочитать переменные-члены, используйте self.a и self.b, в противном случае вы просто создаете временные переменные функции так, как вы это делаете прямо сейчас.

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