Skip to content

Instantly share code, notes, and snippets.

@xenups
Last active August 2, 2022 18:48
Show Gist options
  • Save xenups/64c22c371770b561d5742a3c03fb13d1 to your computer and use it in GitHub Desktop.
Save xenups/64c22c371770b561d5742a3c03fb13d1 to your computer and use it in GitHub Desktop.
class Router:
def __new__(cls, origin, destination):
return ['post_office1', 'post_office2', 'post_office3', 'post_office4']
class Package:
def __init__(self, route):
self.route = route
self.trip = self.generate_trip()
@property
def origin(self):
return self.route[0]
@property
def destination(self):
return self.route[-1]
def generate_trip(self):
"""
it's converting the routes to pairs of origin and destination
[(a,b),(b,c)]
"""
return list(zip(self.route, self.route[1:] + self.route[:0])).copy()
class PostMan:
def __init__(self, name):
self.name = name
self.package = None
def get_package(self, package: Package):
self.package = package
def deliver(self, package: Package):
origin, destination = package.trip[0]
print(f"package delivered from {origin} to {destination} by {self.name}")
package.trip.pop(0)
class PostOffice:
def __init__(self, name, postman: PostMan = None):
self.name = name
self.postman = postman
def get_postman(self):
return self.postman
if __name__ == '__main__':
post_office1 = PostOffice("post_office1", PostMan("postman1"))
post_office2 = PostOffice("post_office2", PostMan("postman2"))
post_office3 = PostOffice("post_office3", PostMan("postman3"))
package = Package(route=Router(origin="post_office1", destination="post_office4"))
post_man1 = post_office1.get_postman()
post_man1.get_package(package)
post_man1.deliver(package)
post_man2 = post_office2.get_postman()
post_man2.get_package(package)
post_man2.deliver(package)
post_man3 = post_office3.get_postman()
post_man3.get_package(package)
post_man3.deliver(package)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment