Найти - Пользователи
Полная версия: Ссылка на атрибут родительского класса
Начало » Python для новичков » Ссылка на атрибут родительского класса
1
Serbis
Имеется два класса - 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 которая на уровне пртотипа несуществует. Как решить ЭТУ проблему? Как из дочернего прототипа вызвать функцию родительского прототипа?
s0rg
А __init__ для loa кто делать будет??
doza_and
Перефразируя выше сказанное. В питоне конструктор родителей всегда надо вызывать явно. Сам он не вызовется. Плюс такого подхода - больший контроль над процессом конструирования.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB