#python-3.7
#python-3.7
Вопрос:
Я начинаю изучать множественное наследование, но, похоже, я не могу получить некоторые значения атрибутов из родительских классов.
У меня есть 3 класса, и один из них наследует два других. Я могу напечатать атрибут «preco_bilhete», но не значения атрибутов «nome», «apelido» и «codigo_voo»!
Прошу прощения за то, что часть моего кода написана на португальском.
class Pessoa():
def __init__(self, nome, apelido, idade, cc, nacionalidade):
self.nome = nome
self.apelido = apelido
self.idade = idade
self.cartaocidadao = cc
self.nacionalidade = nacionalidade
class Voo():
def __init__(self, companhia, cod_voo, cod_aviao, data_partida, horario_partida, data_chegada, horario_chegada, aeroporto_partida, terminal_aeroporto_partida,
aeroporto_chegada, terminal_aeroporto_chegada, tipo_de_bagagem):
self.companhia_aerea = companhia
self.codigo_aviao = cod_aviao
self.codigo_voo = cod_voo
seld.data_voo_partida = data_partida
self.horario_partida = horario_partida
seld.data_voo_chegada = data_chegada
self.horario_chegada = horario_chegada
self.aeroporto_partida = aeroporto_partida
self.terminal_aeroporto_partida = terminal_aeroporto_partida
self.aeroporto_chegada = aeroporto_chegada
self.terminal_aeroporto_chegada = terminal_aeroporto_chegada
self.tipo_de_bagagem = tipo_de_bagagem
class Comprar_Bilhete(Pessoa, Voo):
def __init__(self, nome, apelido, idade, cc, nacionalidade, companhia, cod_voo, cod_aviao, data_partida, horario_partida, data_chegada, horario_chegada,
aeroporto_partida, terminal_aeroporto_partida, aeroporto_chegada, terminal_aeroporto_chegada, tipo_de_bagagem, preco):
self.preco_bilhete = preco
cliente1 = Comprar_Bilhete("Pedro", "Figueiredo", 49, 9876543, "Portuguesa", "Easyjet", "EJ1011", "FT4537", "27-08-2020", "23:05", "28-08-2020", "01:45",
"Humberto Delgado - Lisboa - PT", "Terminal 1", "Stansted - Hertfordshire - UK", "Terminal 3", "Bagagem de Porão Mala de Mão", 275.48)
print(cliente1.preco_bilhete)
print(cliente1.nome)
print(cliente1.apelido)
print(cliente1.codigo_voo)
Ответ №1:
Поскольку это множественное наследование, здесь ваш класс Comprar_Bilhete(Pessoa, Voo)
наследует 2 класса Pessoa
и Voo
. Когда один класс наследует другой класс, он также наследует его переменные и функции (поскольку уровни доступа к обоим по умолчанию public
в python).
Вы можете печатать только значение переменной: preco_bilhete
поскольку это единственная инициализируемая в вашем базовом классе — Comprar_Bilhete
. Чтобы иметь возможность получать значение при печати других 3 производных переменных, т.Е. nome
, apelido
и codigo_voo
, вам также необходимо передать значения для их инициализации.
Похоже, это исправляет ошибку, с которой вы столкнулись:
class Comprar_Bilhete(Pessoa, Voo):
def __init__(self, nome, apelido, idade, cc, nacionalidade, companhia, cod_voo, cod_aviao, data_partida, horario_partida, data_chegada, horario_chegada,
aeroporto_partida, terminal_aeroporto_partida, aeroporto_chegada, terminal_aeroporto_chegada, tipo_de_bagagem, preco):
self.preco_bilhete = preco
self.nome = nome
self.apelido =apelido
self.codigo_voo = cod_voo
Комментарии:
1. Большое спасибо, schezfaz. Это сработало как шарм. мне не хватало именно того, что вы написали в комментарии.