creating objects in python

Post on 23-Jan-2018

315 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Objects in Python

Damian Gordon

Declaring a Class

The Point Class

class MyFirstClass:

pass

# END Class

The Point Class

class MyFirstClass:

pass

# END Class

“move along, nothing to see here”

The Point Class

class MyFirstClass:

pass

# END Class

class <ClassName>:

<Do stuff>

# END Class

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

>>> a = MyFirstClass()

>>> print(a)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = a

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B10>

>>> b = MyFirstClass()

>>> print(b)

<__main__.MyFirstClass object at 0x02D60B30>

The Point Class

class Point:

pass

# END Class

p1 = Point()

p2 = Point()

The Point Class

class Point:

pass

# END Class

p1 = Point()

p2 = Point()

Creating a class

The Point Class

class Point:

pass

# END Class

p1 = Point()

p2 = Point()

Creating a class

Creating objects of that class

Adding Attributes

The Point Class

p1.x = 5

p1.y = 4

p2.x = 3

p2.y = 6

print("P1-x, P1-y is: ", p1.x, p1.y);

print("P2-x, P2-y is: ", p2.x, p2.y);

The Point Class

p1.x = 5

p1.y = 4

p2.x = 3

p2.y = 6

print("P1-x, P1-y is: ", p1.x, p1.y);

print("P2-x, P2-y is: ", p2.x, p2.y);

Adding Attributes:This is all you need to do, just declare them

Python: Object Attributes

• In Python the general form of declaring an attribute is as follows (we call this dot notation):

OBJECT. ATTRIBUTE = VALUE

Adding Methods

The Point Class

class Point:

def reset(self):

self.x = 0

self.y = 0

# END Reset

# END Class

The Point Class

class Point:

def reset(self):

self.x = 0

self.y = 0

# END Reset

# END Class

Adding Methods:This is all you need

The Point Class

p = Point()

p.x = 5

p.y = 4

print("P-x, P-y is: ", p.x, p.y);

p.reset()

print("P-x, P-y is: ", p.x, p.y);

The Point Class

p = Point()

p.x = 5

p.y = 4

print("P-x, P-y is: ", p.x, p.y);

p.reset()

print("P-x, P-y is: ", p.x, p.y);

5 4

The Point Class

p = Point()

p.x = 5

p.y = 4

print("P-x, P-y is: ", p.x, p.y);

p.reset()

print("P-x, P-y is: ", p.x, p.y);

5 4

0 0

Let’s try that again…

The Point Class

p = Point()

p.x = 5

p.y = 4

print("P-x, P-y is: ", p.x, p.y);

p.reset()

print("P-x, P-y is: ", p.x, p.y);

The Point Class

p = Point()

p.x = 5

p.y = 4

print("P-x, P-y is: ", p.x, p.y);

p.reset()

print("P-x, P-y is: ", p.x, p.y);

The Point Class

p = Point()

p.x = 5

p.y = 4

print("P-x, P-y is: ", p.x, p.y);

p.reset()

print("P-x, P-y is: ", p.x, p.y);

We can also say:Point.reset(p)

Multiple Arguments

The Point Class

class Point:

def reset(self):

self.x = 0

self.y = 0

# END Reset

# END Class

The Point Class

• We can do this in a slightly different way, as follows:

The Point Classclass Point:

def move(self,a,b):

self.x = a

self.y = b

# END Move

def reset(self):

self.move(0,0)

# END Reset

# END Class

The Point Classclass Point:

def move(self,a,b):

self.x = a

self.y = b

# END Move

def reset(self):

self.move(0,0)

# END Reset

# END Class

Declare a new method called “move” that writes

values into the object.

The Point Classclass Point:

def move(self,a,b):

self.x = a

self.y = b

# END Move

def reset(self):

self.move(0,0)

# END Reset

# END Class

Declare a new method called “move” that writes

values into the object.

Move the values 0 and 0 into the class to reset.

Distance between two points

The Point Class

• The distance between two points is:

d

d = √(x2 – x1)2 + (y2 – y1) 2

d = √(6 – 2)2 + (5 – 2) 2

d = √(4)2 + (3) 2

d = √16 + 9

d = √25

d = 5

The Point Class

• Let’s see what we have already:

The Point Classclass Point:

def move(self,a,b):

self.x = a

self.y = b

# END Move

def reset(self):

self.move(0,0)

# END Reset

# END Class

The Point Class

• Now let’s add a new method in:

The Point Classimport math

class Point:

def calc_distance(self, other_point):

return math.sqrt(

(self.x – other_point.x)**2 +

(self.y – other_point.y)**2)

# END calc_distance

# END Class d = √(x2 – x1)2 + (y2 – y1) 2

The Point Class

• Now let’s add some code to make it run:

The Point Class

p1 = Point()

p2 = Point()

p1.move(2,2)

p2.move(6,5)

print("P1-x, P1-y is: ", p1.x, p1.y)

print("P2-x, P2-y is: ", p2.x, p2.y)

print("Distance from P1 to P2 is:", p1.calc_distance(p2))

p1

p2

Initialising an Object

Initialising an Object

• What if we did the following:

Initialising an Object

p1 = Point()

p1.x = 5

print("P1-x, P1-y is: ", p1.x, p1.y);

Initialising an Object

p1 = Point()

p1.x = 5

print("P1-x, P1-y is: ", p1.x, p1.y);

>>>

Traceback (most recent call last):

File "C:/Users/damian.gordon/AppData/

Local/Programs/Python/Python35-32/Point-error.py",

line 11, in <module>

print("P1-x, P1-y is: ", p1.x, p1.y);

AttributeError: 'Point' object has no attribute 'y‘

>>>

Initialising an Object

• So what can we do?

Initialising an Object

• So what can we do?

• We need to create a method that forces the programmers to initialize the attributes of the class to some starting value, just so that we don’t have this problem.

Initialising an Object

• So what can we do?

• We need to create a method that forces the programmers to initialize the attributes of the class to some starting value, just so that we don’t have this problem.

• This is called an initialization method.

Initialising an Object

• Python has a special name it uses for initialization methods.

__init__()

class Point:

def __init__(self,x,y):

self.move(x,y)

# END Init

def move(self,a,b):

self.x = a

self.y = b

# END Move

def reset(self):

self.move(0,0)

# END Reset

# END Class

Initialising an Object

Initialising an Objectclass Point:

def __init__(self,x,y):

self.move(x,y)

# END Init

def move(self,a,b):

self.x = a

self.y = b

# END Move

def reset(self):

self.move(0,0)

# END Reset

# END Class

When you create an object from this class, you are going to have to declare initial values for X and Y.

Initialising an Object

• So without the initialization method we could do this:

– p1 = Point()

– p2 = Point()

• but with the initialization method we have to do this:

– p1 = Point(6,5)

– p2 = Point(2,2)

Initialising an Object

• And if we forget to include the values, what happens?

Initialising an Object

• And if we forget to include the values, what happens?

Traceback (most recent call last):

File "C:/Users/damian.gordon/AppData/Local/

Programs/Python/Python35-32/Point-init.py", line

21, in <module>

p = Point()

TypeError: __init__() missing 2 required

positional arguments: 'x' and 'y'

Initialising an Object

• But if we want to be lazy we can do the following:

Initialising an Object

def __init__(self, x=0, y=0):

self.move(x,y)

# END Init

Initialising an Object

def __init__(self, x=0, y=0):

self.move(x,y)

# END Init

Initialising an Object

• And then we can do:

– p1 = Point()

– p2 = Point(2,2)

Initialising an Object

• And then we can do:

– p1 = Point()

– p2 = Point(2,2)

If we don’t supply any values, the initialization method will set the

values to 0,0.

Initialising an Object

• And then we can do:

– p1 = Point()

– p2 = Point(2,2)

If we don’t supply any values, the initialization method will set the

values to 0,0.

But we can also supply the values, and the object is created with these

default values.

Documenting the Methods

Documenting the Methods

• Python is considered one of the most easy programming languages, but nonetheless a vital part of object-orientated programming is to explain what each class and method does to help promote object reuse.

Documenting the Methods

• Python supports this through the use of docstrings.

• These are strings enclosed in either quotes(‘) or doublequotes(“) just after the class or method declaration.

Documenting the Methodsclass Point:

“Represents a point in 2D space”

def __init__(self,x,y):

‘Initialise the position of a new point’

self.move(x,y)

# END Init

Documenting the Methodsdef move(self,a,b):

‘Move the point to a new location’

self.x = a

self.y = b

# END Move

def reset(self):

‘Reset the point back to the origin’

self.move(0,0)

# END Reset

Initialising an Object

• Now run the program, and then do:

>>>

>>> help (Point)

Initialising an Object• And you’ll get:

Help on class Point in module __main__:

class Point(builtins.object)

| Represents a point in 2D space

|

| Methods defined here:

|

| calc_distance(self, other_point)

| Get the distance between two points

|

| move(self, a, b)

| Move the point to a new location

|

| reset(self)

| Reset the point back to the origin

| ----------------------------------------------

etc.

top related