Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 13, 2012 12:48:25

Serbis
От:
Зарегистрирован: 2012-02-13
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылка на атрибут родительского класса

Имеется два класса - loa(родительский) и test(дочерний). Из класса test нужно получить атрибут класса loa. Он определен в конструкторе как l1. Но по понятным причинам я его получить не могу так как его реально нет, он пока еще по факту не объявлен, хотя в конструкторе и прописан. И попытка сслаться на него из прототипа test приводе к ошибке.

class loa:
def __init__(self):
self.l1 = ''
self.l2 = ''

def arg_get(self):
args = '-h, -o:, -s:'
try:
opts, args = getopt.getopt(sys.argv[1:], args, ["help"])
except getopt.error, msg:
print msg
print "For help use --help"
sys.exit(2)
for o, a in opts:
if o in ("-h", "--help"):
print 'Helpaaaaaaaaaaaaaaaaaaaaaaaa'
elif o in("-o"):
self.l1=a
elif o in("-s"):
self.l2=a
else:
assert False, "unhandled option"

def arg_proc(self):
if self.l1:
print self.l1
if self.l2:
print self.l2

class test(loa):
def __init__(self):
print self.l1 #На этой строке и есть ошибка.
Решение именно этой проблемы мне известно, создать инстанс test и ему в конструктор передать l1 полученную из инстанса loa. Но я не понимаю в чем тогда смысл наследования, если я немогу из дочернего класса сослаться например на родительский метод arg_proc, который ссылается на self.l1 которая на уровне пртотипа несуществует. Как решить ЭТУ проблему? Как из дочернего прототипа вызвать функцию родительского прототипа?



Офлайн

#2 Фев. 13, 2012 14:26:07

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Ссылка на атрибут родительского класса

А __init__ для loa кто делать будет??

Офлайн

#3 Фев. 13, 2012 18:43:01

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Ссылка на атрибут родительского класса

Перефразируя выше сказанное. В питоне конструктор родителей всегда надо вызывать явно. Сам он не вызовется. Плюс такого подхода - больший контроль над процессом конструирования.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version