For this recipe, you first imported an OSM dataset to PostGIS with ogr2ogr, using the GDAL OSM driver.
Then, you created a Python class, OSMGeocoder, to provide very basic support to the class consumer for geocoding street names, using the OSM data imported in PostGIS. For this purpose, you used the trigram support included in PostgreSQL with the pg_trgm contrib module.
The class that you have written is mainly composed of two methods: the __init__ method, where the connection parameters must be passed in order to instantiate an OSMGeocoder object, and the geocode method. The geocode method accepts an input parameter, placename, and creates a connection to the PostGIS database using the Psycopg2 library in order to execute a query to find the streets in the database with a name similar to the placename parameter.
The class can be consumed both from the command line, using the __name__ == '__main__' code block, or from an external Python code. You tried both approaches. In the latter, you created another Python script, where you imported the OSMGeocoder class combined with the GDAL/OGR Python bindings to generate a new PostGIS point layer with features resulted from a list of geocoded street names.