Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I design this procedural code as class based (object oriented)?

I'm a beginner-intermediate self taught Python developer,

In most of the projects I completed, I can see the following procedure repeats. I don't have any outside home code experiences, I think the below code is not so professional as it is not reusable, and seems like it is not fitting all together in a container, but loosely coupled functions on different modules.

def get_query():
    # returns the query string
    pass

def make_request(query):
    # makes and returns the request with query
    pass

def make_api_call(request):
    # calls the api and returns response
    pass

def process_response(response):
    # process the response and returns the details
    pass

def populate_database(details):
    # populates the database with the details and returns the status of population
    pass

def log_status(status):
    # logs the status so that developer knows whats happening
    pass

query = get_query()
request = make_request(query)
response = make_api_call(request)
details = process_response(response)
status = populate_database(details)
log_status(status)

How do I design this procedure as a class based design?

like image 868
All Іѕ Vаиітy Avatar asked Oct 01 '15 10:10

All Іѕ Vаиітy


1 Answers

If I understand correctly, you want these group of functions to be reused. Good approach to this would be create Abstract base class with these methods as shown below:

from abc import ABCMeta

class Generic(object):
__metaclass__  = ABCMeta


    def get_query(self):
        # returns the query string
        pass

    def make_request(self, query):
        # makes and returns the request with query
        pass

    def make_api_call(self, request):
        # calls the api and returns response
        pass

    def process_response(self, response):
        # process the response and returns the details
        pass

    def populate_database(self, details):
        # populates the database with the details and returns the status of population
        pass

    def log_status(self, status):
        # logs the status so that developer knows whats happening
        pass

Now whenever you need to use any of these methods in your project, inherit your class from this abstract class.

class SampleUsage(Generic):

    def process_data(self):
        # In any of your methods you can call these generic functions
        self.get_query()

And then you can create object to actually get results which you want.

obj = SampleUsage()
obj.process_data()
like image 127
Vinod Avatar answered Sep 22 '22 19:09

Vinod