Objects

  • date & datetime

  • methods & attributes

Clicker Question #1

What would be the best way to store a date?

  • A) A string

  • B) A list of numbers

  • C) It can’t be done

  • D) A dictionary

  • E) Something else

Storing Dates

# A date, stored as a string
date_string = '29/09/1988'
print(date_string)
29/09/1988
# A date, stored as a list of number
date_list = ['29', '09', '1988']
date_list
['29', '09', '1988']
# A date, stored as a series of numbers
day = 29
month = 9
year = 1988

print(day)
29
# A date, stored as a dictionary
date_dictionary = {'day': 29, 'month': 9, 'year': 1988}
date_dictionary
{'day': 29, 'month': 9, 'year': 1988}

Objects

Objects are an organization of data (called attributes), with associated code to operate on that data (functions defined on the objects, called methods).

Ways to organize data (variables) and functions together.

Example Object: Date

# Import a date object
from datetime import date
date?
# Set the data we want to store in our date object
day = 29
month = 9
year = 1988

# Create a date object
my_date = date(year, month, day)
print(my_date)
1988-09-29
# Check what type of thing `my_date` is
type(my_date) 
datetime.date

Accessing Attributes & Methods

Attributes and methods are accessed with a ., followed by the attribute/method name on the object.

Date - Attributes

Attributes look up & return information about the object.

attributes maintain the object’s state, simply returning information about the object to you

# Get the day attribute
my_date.day
29
# Get the month attribute
my_date.month
9
# Get the year attribute
my_date.year
1988

Date - Methods

These are functions that belong to and operate on the object directly.

methods modify the object’s state

# Method to return what day of the week the date is
my_date.weekday()
3
# Reminder: check documentation with '?'
date.weekday?
# Get the ISO format representation of the date (as a string)
my_date.isoformat()
'1988-09-29'
# operates on date object
# returns a string
type(my_date.isoformat())
str

It’s also possible to carry out operations on multiple date objects.

# define a second date
my_date2 = date(1980, 7, 29)
print(my_date, my_date2)
1988-09-29 1980-07-29
# calculate the difference between times
time_diff = my_date - my_date2
print(time_diff.days,  "days") #in days
print(time_diff.days/365,"years") #in years
2984 days
8.175342465753424 years

Listing Attributes & Methods : dir

# tab complete to access
# methods and attributes
my_date.

# works to find attributes and methods
# for date type objects generally
date.
## dir ouputs all methods and attributes
## we'll talk about the double underscores next lecture
dir(my_date)
['__add__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__ne__',
 '__new__',
 '__radd__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rsub__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 'ctime',
 'day',
 'fromisoformat',
 'fromordinal',
 'fromtimestamp',
 'isocalendar',
 'isoformat',
 'isoweekday',
 'max',
 'min',
 'month',
 'replace',
 'resolution',
 'strftime',
 'timetuple',
 'today',
 'toordinal',
 'weekday',
 'year']

Clicker Question #2

Given the code below:

my_date = date(year = 1050, month = 12, day = 12)

Which is the best description:

  • A) my_date is an object, with methods that store data, and attributes that store procedures

  • B) my_date is variable, and can be used with functions

  • C) my_date is an attribute, with methods attached to it

  • D) my_date is a method, and also has attributes

  • E) my_date is an object, with attributes that store data, and methods that store procedures

Clicker Question #3

For an object lets with a method do_something, how would you execute that method?

  • A) do_something(lets)

  • B) lets.do_something

  • C) lets.do_something()

  • D) lets.do.something()

  • E) ¯\_(ツ)_/¯

Clicker Question #4

For an object lets with an attribute name, how would you return the information stored in name for the object lets?

  • A) name(lets)

  • B) lets.name

  • C) lets.name()

  • D) lets.get.name()

  • E) ¯\_(ツ)_/¯

Objects Example: DateTime

from datetime import datetime
# get documentation
datetime?
# Get the current date & time
now = datetime.today()

print(now) 
2020-05-04 08:28:31.305005
# Check some attributes of the object
print(now.year)
print(now.day)
2020
4
# Check a method of the object
print(now.weekday())
0

Objects Summary

  • Objects allow for data (attributes) and functions (methods) to be organized together

    • methods operate on the object type (modify state)

    • attributes store and return information (data) about the object (maintain state)

  • dir() returns methods & attributes for an object

  • Syntax:

    • obj.method()

    • obj.attribute

  • date and datetime are two types of objects in Python