of coursewe could have made this method insteadbut then we should call it calculate_average()since methods represent actions but property called average is more suitableboth easier to typeand easier to read custom setters are useful for validationas we've already seenbut they can also be used to proxy value to another location for examplewe could add content setter to the webpage class that automatically logs into our web server and uploads new page whenever the value is set manager objects we've been focused on objects and their attributes and methods nowwe'll take look at designing higher-level objectsthe kinds of objects that manage other objects the objects that tie everything together the difference between these objects and most of the examples we've seen so far is that our examples tend to represent concrete ideas management objects are more like office managersthey don' do the actual "visiblework out on the floorbut without themthere would be no communication between departments and nobody would know what they are supposed to do (althoughthis can be true anyway if the organization is badly managed!analogouslythe attributes on management class tend to refer to other objects that do the "visibleworkthe behaviors on such class delegate to those other classes at the right timeand pass messages between them as an examplewe'll write program that does find and replace action for text files stored in compressed zip file we'll need objects to represent the zip file and each individual text file (luckilywe don' have to write these classesthey're available in the python standard librarythe manager object will be responsible for ensuring three steps occur in order unzipping the compressed file performing the find and replace action zipping up the new files the class is initialized with the zip filename and search and replace strings we create temporary directory to store the unzipped files inso that the folder stays clean the python pathlib library helps out with file and directory manipulation we'll learn more about that in strings and serializationbut the interface should be pretty clear in the following exampleimport sys import shutil import zipfile