Partial

Partial

ยท

2 min read

In software development, "partial" typically refers to a type of function or method that allows you to create a new function by applying arguments to an existing function, and returning a new function that accepts the remaining arguments.

In Python, the functools.partial function is used to create partial functions. Here's an example:

import functools

def add_numbers(a, b, c):
    return a + b + c

add_5_and_10 = functools.partial(add_numbers, 5, 10)
# add_5_and_10 is now a new function that expects one argument: c

result = add_5_and_10(15)
# This will return 30, since 5 + 10 + 15 = 30

In this example, we defined a function add_numbers that takes three arguments and returns their sum. We then used functools.partial to create a new function called add_5_and_10 that expects only one argument (the third argument, c) and has the first two arguments (a and b) set to 5 and 10, respectively.

When we call add_5_and_10 with an argument of 15, it returns the sum of 5, 10, and 15, which is 30. By using functools.partial, we were able to create a new function that is based on an existing function but has some of its arguments pre-set to specific values. This can be useful in situations where you need to create multiple functions that are similar but have slightly different arguments.

Here's an example of using a partial in a Django model's models.py file:

from django.db import models
from functools import partial

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    published_date = models.DateField()

    def __str__(self):
        return self.title

class PaperbackBook(Book):
    cover_type = models.CharField(max_length=50)

    def __str__(self):
        return f"{super().__str__()} (Paperback)"

class HardcoverBook(Book):
    cover_type = models.CharField(max_length=50)

    def __str__(self):
        return f"{super().__str__()} (Hardcover)"

paperback_book = partial(PaperbackBook, cover_type='Paperback')
hardcover_book = partial(HardcoverBook, cover_type='Hardcover')

In this example, we define a Book model with three fields: title, author, and published_date. We then define two subclasses of Book: PaperbackBook and HardcoverBook, each with an additional field cover_type.

Next, we use the partial function to create two partial functions: paperback_book and hardcover_book. These partial functions are based on the PaperbackBook and HardcoverBook classes, respectively, but with the cover_type field pre-set to 'Paperback' and 'Hardcover', respectively.

Now we can use paperback_book and hardcover_book as constructor functions to create new PaperbackBook and HardcoverBook objects, respectively, with the cover_type field already set to their respective values. For example:

pb = paperback_book(title='The Great', author='Scott', published_date='1920-01-01')
hb = hardcover_book(title='bird', author='Lee', published_date='1900-01-01')

This creates a PaperbackBook object pb with title "The Great", author "Scott", published date 1920, and cover type "Paperback", and a HardcoverBook object hb with title "bird", author "Lee", published date 1900, and cover type "Hardcover".

ย