Surprise: we’ve been using objects!#

Python uses OOP notations extensively, and we’ve already been programming with objects. Python lists, strings, and dictionaries are all objects. Each instance of ValueError and all of the other Errors we’ve met.

Method calls take the form o.m(arg1), where you call the method m on the object o with the argument arg1. A method is a function that runs “on” an object. That is, the code for m will be able to work on both the argument arg1 and the receiver o. We’ve seen this notation for, e.g., "hello there".split() or l = []; l.append(5).

We haven’t seen fields yet, but they’ve been there in the background. For example, here’s an example with a ValueError:

Here v.args is us getting the field or member args from the object v, whose class is ValueError.

Notice that accessing a field is just like calling a method—only you leave off the parentheses. The object.thing dot-notation is a nice one: it expresses the idea that thing “belongs” to object, whether thing is a method or a field.

We’ve also seen the dot-notation for working with modules, i.e., math.sqrt(16). In Python, modules are objects, but the functions in a module are not methods.