У меня есть класс с именем «Vol», в котором одним из его атрибутов является список с именем «seients», и у меня есть метод, в котором он добавляет место в атрибут списка объекта.
class Vol():
def __init__(self):
self.codi = None
self.data = None
self.companyia = None
self.tipus_avio = None
self.desti = None
self.origen = None
self.seients = []
def pintaDades(self):
print("codi: ", self.codi)
print("data: ", self.data)
print("companyia: ", self.company)
print("tipo de avio: ", self.tipo_avion)
print("desti: ", self.desti)
print("origen: ", self.origen)
def inicialitzaTeclat(self): # lo mismo que creaVol() de la practica 1
self.codi = str(input("Introduce Codi: "))
self.data = self.comprovarData(str(input("Introduce data: ")))
while not self.data: # entrara en el bucle siempre y cuando data= TRUE, y se debera repetir otra vez el ingreso de la variable
self.data = str(input("Introduce data: ")) # data=comprovarData(str(input("Introduce data:")))
self.data = self.comprovarData(self.data)
self.company = str(input("Introduce Companyia: "))
self.tipo_avion = str(input("Introduce tipo de Avion: "))
self.desti = str(input("Introduce destino: "))
self.origen = str(input("Introduce origeno: "))
def afegeixSeient(self, seat): # meter seient en la lista seients
self.seients.append(seat) # agrega a la lista el objeto seient ==> seients = seients +[seat]
def pintaSeient(self): # muestra todos los asientos del vuelo, recorrer lista
i = 0
if len(self.seients[:]) > 0: # si hay algo en la lista
while i < len(self.seients[:]):
print(self.seients[i].fila, self.seients[i].lletra)
i = i + 1
else:
print("lista de asientos vacia.")
У меня есть другой класс под названием «Сиденье»:
class Seient():
fila=None
lletra=None
def pintaDades(self):
print("fila: ",self.fila)
print("lletra: ",self.lletra)
def inicialitzaTeclat(self):
self.fila=str(input("Inserta fila: "))
self.lletra=str(input("Inserta lletra: "))
В Основную программу я добавлю только тот фрагмент, который, как мне кажется, меня не подводит, поскольку он довольно длинный, он содержит несколько функций, в которых это 'createVol', эта функция в основном создает полет, и если все атрибуты полета верны, то может случиться добавить места полета, которые будут добавлены в атрибуте 'seient' класса Vol:
def crearVol():
v=Vol() #intancia class Vol
v.inicialitzaTeclat() #metodo para introducir cosas del vuelo
s=Seient()
s.inicialitzaTeclat()
v.afegeixSeient(s) #metodo para intrudir asiento
v.pintaDades()
v.pintaSeient()
opcio=(str(input("Voleu introduir un altre seient? (S/N) "))).upper() # opcio.upper, convertimos en mayus
while opcio[0]=="S":
s.inicialitzaTeclat()
v.afegeixSeient(s) #metodo para intrudir asiento
v.pintaDades()
v.pintaSeient()
opcio=(str(input("Voleu introduir un altre seient? (S/N) "))).upper()
Проблема в том, что каждый раз, когда я вхожу в запись, и она сохраняется в атрибуте 'seient' класса Vol, первая введенная запись исчезает, а вторая добавляет ее в индексы 0 и 1 списка 'seient' то есть я оставляю вам пример.
пользователь ввел 2 места в полете, первое место - «1A», а следующее До '2E', я должен сказать, что место также является классом типа 'seient', поэтому список будет содержать объекты 'seient'.
список должен иметь места, хранящиеся следующим образом,
self.seient=[<__main__.Seient object at 0x000001D223B94B70>,<__main__.Seient object at 0x000001D223B95F70>]
Если мы распечатаем места, которые они должны покинуть
>>>A1
>>>2E
Но дело в том, что я не получаю это, атрибут seient, сохраняет мне последнюю запись, введенную во все индексы списка а остальные места потеряны.
self.seient=[<__main__.Seient object at 0x000001D223B94B70>,<__main__.Seient object at 0x000001D223B94B70>]
Если бы мы напечатали это, оно вышло бы.
>>>2E # Este debería ser A1
>>>2E
Может ли кто-нибудь сказать мне, что я делаю неправильно?
В python огромная mayorГ - в элементов это объекты... и эти управляют формы о implГ-встрече посредством указателей потом в следующем примере:
s = Seient()
s2 = s
Обе переменные указывают на тот же объект.
, Чтобы это предотвращать, ты должен убеждаться создания новых объектов каждый раз:
while opcio[0]=="S":
s = Seient() # Nuevo objeto
s.inicialitzaTeclat()
v.afegeixSeient(s) #metodo para intrudir asiento