python setter

一个例子,使用 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'{(" -> ").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)

你可能感兴趣的:(python)