2010-02-12 2 views
0

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

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

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

этот учебник вы читаете снова? – SilentGhost

ответ

13

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

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 

Похоже, ваша проблема не (только) наследование, но и как правильно define classes in Python.

Некоторые примечания:

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

Гораздо лучше, чем мой ответ. Я не должен был лениться, чтобы не писать код! Отлично сработано. :) – rui

1

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

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

Смежные вопросы