一个例子,使用 setter, 直接修改 property:
"""
Flight leg:
GLA -> LHR -> CAN
2 segments (GLA -> LHR, LHR -> CAN)
"""
from typing import List
class Segment:
def __init__(self, departure, destination):
self.departure = departure # GLA
self.destination = destination # LHR
class Flight:
def __init__(self, segments: List[Segment]):
self.segments = segments
def __repr__(self):
stops = [self.segments[0].departure]
for r in self.segments:
stops.append(r.destination)
return f'<Flight {(" -> ").join(stops)} >'
@property
def departure_point(self) -> str:
return self.segments[0].departure
# SETTER !!
@departure_point.setter
def departure_point(self, val):
# self.segments[0].departure = val
dest = self.segments[0].destination
self.segments[0] = Segment(departure=val, destination=dest)
flight = Flight([Segment("GLA", "LHR")])
print(flight)
flight.departure_point = "EDI"
print(flight)