[Tutor] Object oriented design

Danny Yoo dyoo at hashcollision.org
Sun Dec 20 15:48:56 EST 2015


On Sat, Dec 19, 2015 at 4:48 PM, jamie hu <jamiehu17 at yandex.com> wrote:
>    I am starting with Python object oriented concepts and have difficulty in
>    understanding object instantiation. Below is an example code that I am
>    trying to think/implement. I can create a given student object based on
>    given firstname, lastname and grade. How do I find all objects matching
>    particular criteria and return them to caller? Do I need to iterate/select
>    through some list/database and create Student objects again?


In order to find something, that something needs to be accessible from
"somewhere".

In typical beginner programs, that "somewhere" is an in-memory
collection, like a list or dictionary, as Alan suggests.  I'd expect,
for your purposes, that this is an appropriate representation for
"somewhere".

find_by_lastname needs to know about this "somewhere".  You have a few
options.  1.  You can either pass the "somewhere" in as an explicit
parameter, or 2. hardcode it within find_by_lastname's definition.

We expect that #1 will look something like:

#####################################
"""Collection of things."""
STUDENTS = []

...

def find_by_lastname(students, lastname):
    """Contract: listof(Student) string -> Student
    Given a list of students and a student's last name,
    returns the student with that last name.
    """
   # ... fill me in


## later, we can call find_by_lastname, passing in the
## collection as an explicit argument.
find_by_lastname(STUDENTS, "jamie")
#####################################


And #2 will probably look something like:

#####################################
"""Collection of things."""
STUDENTS = []

...

def find_by_lastname(lastname):
    """Contract: string -> Student
    Given a student's last name, returns the student
    with that last name, looking through STUDENTS.
    """
   # ... fill me in


## later, we can call find_by_lastname, passing in the
## collection as an explicit argument.
find_by_lastname("jamie")
#####################################


This is a rough sketch.  So, which one do you choose?

I have no idea!

This is a decision point, and one that you need to resolve, because
either choice has its own advantages and tradeoffs.  Assuming this is
an assignment, you need to talk with your instructor to see if there's
one that they had in mind, or if this is something you get to decide.
Personally, I don't like hardcoding, so #1 is my pick, but #2 has its
advantages too: it's easier to call.


Please feel free to ask questions.  Good luck.


More information about the Tutor mailing list