SLIDE 1
61A Lecture 15 Announcements Object-Oriented Programming - - PowerPoint PPT Presentation
61A Lecture 15 Announcements Object-Oriented Programming - - PowerPoint PPT Presentation
61A Lecture 15 Announcements Object-Oriented Programming Object-Oriented Programming 4 Object-Oriented Programming A method for organizing programs 4 Object-Oriented Programming A method for organizing programs Data abstraction 4
SLIDE 2
SLIDE 3
Object-Oriented Programming
SLIDE 4
Object-Oriented Programming
4
SLIDE 5
Object-Oriented Programming
A method for organizing programs
4
SLIDE 6
Object-Oriented Programming
A method for organizing programs
- Data abstraction
4
SLIDE 7
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
4
SLIDE 8
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
4
SLIDE 9
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
4
SLIDE 10
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
4
SLIDE 11
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
4
SLIDE 12
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
4
SLIDE 13
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
4
SLIDE 14
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
SLIDE 15
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
John's Account
SLIDE 16
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
John's Account Jack's Account
SLIDE 17
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
John's Account Jack's Account John
SLIDE 18
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
John's Account Jack's Account John Withdraw $10
SLIDE 19
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
John's Account Jack's Account John Withdraw $10 Deposit $10
SLIDE 20
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
John's Account Jack's Account John Withdraw $10 Deposit $10
SLIDE 21
Object-Oriented Programming
A method for organizing programs
- Data abstraction
- Bundling together information and related behavior
A metaphor for computation using distributed state
- Each object has its own local state
- Each object also knows how to manage its own local state,
based on method calls
- Method calls are messages passed between objects
- Several objects may all be instances of a common type
- Different types may relate to each other
Specialized syntax & vocabulary to support this metaphor
4
John's Account Jack's Account John Withdraw $10 Deposit $10 Apply for a loan!
SLIDE 22
Classes
5
SLIDE 23
Classes
A class serves as a template for its instances
5
SLIDE 24
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance
5
SLIDE 25
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance >>> a = Account('John')
5
SLIDE 26
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance >>> a = Account('John')
5
SLIDE 27
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance >>> a = Account('John')
5
SLIDE 28
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance >>> a = Account('John') >>> a.holder 'John'
5
SLIDE 29
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance >>> a = Account('John') >>> a.holder 'John' >>> a.balance
5
SLIDE 30
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance Idea: All bank accounts should have withdraw and deposit behaviors that all work in the same way >>> a = Account('John') >>> a.holder 'John' >>> a.balance
5
SLIDE 31
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance Idea: All bank accounts should have withdraw and deposit behaviors that all work in the same way >>> a = Account('John') >>> a.holder 'John' >>> a.balance >>> a.deposit(15) 15
5
SLIDE 32
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance Idea: All bank accounts should have withdraw and deposit behaviors that all work in the same way >>> a = Account('John') >>> a.holder 'John' >>> a.balance >>> a.deposit(15) 15 >>> a.withdraw(10) 5
5
SLIDE 33
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance Idea: All bank accounts should have withdraw and deposit behaviors that all work in the same way >>> a = Account('John') >>> a.holder 'John' >>> a.balance >>> a.deposit(15) 15 >>> a.withdraw(10) 5 >>> a.balance 5
5
SLIDE 34
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance Idea: All bank accounts should have withdraw and deposit behaviors that all work in the same way >>> a = Account('John') >>> a.holder 'John' >>> a.balance >>> a.deposit(15) 15 >>> a.withdraw(10) 5 >>> a.balance 5 >>> a.withdraw(10) 'Insufficient funds'
5
SLIDE 35
Classes
A class serves as a template for its instances Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each newly created instance Idea: All bank accounts should have withdraw and deposit behaviors that all work in the same way >>> a = Account('John') >>> a.holder 'John' >>> a.balance >>> a.deposit(15) 15 >>> a.withdraw(10) 5 >>> a.balance 5 >>> a.withdraw(10) 'Insufficient funds' Better idea: All bank accounts share a withdraw method and a deposit method
5
SLIDE 36
Class Statements
SLIDE 37
The Class Statement
7
SLIDE 38
The Class Statement
7
class <name>: <suite>
SLIDE 39
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment
7
class <name>: <suite>
SLIDE 40
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment Assignment & def statements in <suite> create attributes of the class (not names in frames)
7
class <name>: <suite>
SLIDE 41
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment Assignment & def statements in <suite> create attributes of the class (not names in frames)
7
The suite is executed when the class statement is executed. class <name>: <suite>
SLIDE 42
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment Assignment & def statements in <suite> create attributes of the class (not names in frames)
7
The suite is executed when the class statement is executed. >>> class Clown: ... nose = 'big and red' ... def dance(): ... return 'No thanks' ... class <name>: <suite>
SLIDE 43
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment Assignment & def statements in <suite> create attributes of the class (not names in frames)
7
The suite is executed when the class statement is executed. >>> class Clown: ... nose = 'big and red' ... def dance(): ... return 'No thanks' ... >>> Clown.nose 'big and red' class <name>: <suite>
SLIDE 44
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment Assignment & def statements in <suite> create attributes of the class (not names in frames)
7
The suite is executed when the class statement is executed. >>> class Clown: ... nose = 'big and red' ... def dance(): ... return 'No thanks' ... >>> Clown.nose 'big and red' >>> Clown.dance() 'No thanks' class <name>: <suite>
SLIDE 45
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment Assignment & def statements in <suite> create attributes of the class (not names in frames)
7
The suite is executed when the class statement is executed. >>> class Clown: ... nose = 'big and red' ... def dance(): ... return 'No thanks' ... >>> Clown.nose 'big and red' >>> Clown.dance() 'No thanks' >>> Clown <class '__main__.Clown'> class <name>: <suite>
SLIDE 46
The Class Statement
A class statement creates a new class and binds that class to <name> in the first frame of the current environment Assignment & def statements in <suite> create attributes of the class (not names in frames)
7
The suite is executed when the class statement is executed. >>> class Clown: ... nose = 'big and red' ... def dance(): ... return 'No thanks' ... >>> Clown.nose 'big and red' >>> Clown.dance() 'No thanks' >>> Clown <class '__main__.Clown'> class <name>: <suite>
SLIDE 47
Object Construction
8
SLIDE 48
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim')
8
SLIDE 49
When a class is called:
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim')
8
SLIDE 50
When a class is called: 1.A new instance of that class is created:
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim')
8
SLIDE 51
When a class is called: 1.A new instance of that class is created:
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim')
8
SLIDE 52
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim')
8
SLIDE 53
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
SLIDE 54
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
SLIDE 55
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
SLIDE 56
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
balance: 0
SLIDE 57
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
balance: 0 holder: 'Jim'
SLIDE 58
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
balance: 0 holder: 'Jim' __init__ is called a constructor
SLIDE 59
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') >>> a.holder 'Jim' class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
balance: 0 holder: 'Jim' __init__ is called a constructor
SLIDE 60
When a class is called: 1.A new instance of that class is created: 2.The __init__ method of the class is called with the new object as its first argument (named self), along with any additional arguments provided in the call expression
An account instance
Object Construction
Idea: All bank accounts have a balance and an account holder; the Account class should add those attributes to each of its instances >>> a = Account('Jim') >>> a.holder 'Jim' >>> a.balance class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
8
balance: 0 holder: 'Jim' __init__ is called a constructor
SLIDE 61
Object Identity
9
SLIDE 62
Object Identity
Every object that is an instance of a user-defined class has a unique identity:
9
SLIDE 63
Object Identity
>>> a = Account('John') >>> b = Account('Jack') Every object that is an instance of a user-defined class has a unique identity:
9
SLIDE 64
Object Identity
>>> a = Account('John') >>> b = Account('Jack') Every object that is an instance of a user-defined class has a unique identity:
9
Every call to Account creates a new Account
- instance. There is only one Account class.
SLIDE 65
Object Identity
>>> a = Account('John') >>> b = Account('Jack') Every object that is an instance of a user-defined class has a unique identity:
9
Every call to Account creates a new Account
- instance. There is only one Account class.
>>> a.balance >>> b.holder 'Jack'
SLIDE 66
Object Identity
>>> a = Account('John') >>> b = Account('Jack') Every object that is an instance of a user-defined class has a unique identity: Identity operators "is" and "is not" test if two expressions evaluate to the same object:
9
Every call to Account creates a new Account
- instance. There is only one Account class.
>>> a.balance >>> b.holder 'Jack'
SLIDE 67
Object Identity
>>> a = Account('John') >>> b = Account('Jack') >>> a is a True >>> a is not b True Every object that is an instance of a user-defined class has a unique identity: Identity operators "is" and "is not" test if two expressions evaluate to the same object:
9
Every call to Account creates a new Account
- instance. There is only one Account class.
>>> a.balance >>> b.holder 'Jack'
SLIDE 68
Object Identity
>>> a = Account('John') >>> b = Account('Jack') >>> a is a True >>> a is not b True Every object that is an instance of a user-defined class has a unique identity: Binding an object to a new name using assignment does not create a new object: Identity operators "is" and "is not" test if two expressions evaluate to the same object:
9
Every call to Account creates a new Account
- instance. There is only one Account class.
>>> a.balance >>> b.holder 'Jack'
SLIDE 69
Object Identity
>>> a = Account('John') >>> b = Account('Jack') >>> a is a True >>> a is not b True Every object that is an instance of a user-defined class has a unique identity: Binding an object to a new name using assignment does not create a new object: Identity operators "is" and "is not" test if two expressions evaluate to the same object: >>> c = a >>> c is a True
9
Every call to Account creates a new Account
- instance. There is only one Account class.
>>> a.balance >>> b.holder 'Jack'
SLIDE 70
Methods
SLIDE 71
Methods
11
SLIDE 72
Methods
Methods are functions defined in the suite of a class statement
11
SLIDE 73
Methods
Methods are functions defined in the suite of a class statement class Account:
11
SLIDE 74
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder):
11
SLIDE 75
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0
11
SLIDE 76
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder
11
SLIDE 77
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount):
11
SLIDE 78
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount):
11
self should always be bound to an instance of the Account class
SLIDE 79
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount
11
self should always be bound to an instance of the Account class
SLIDE 80
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance
11
self should always be bound to an instance of the Account class
SLIDE 81
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance def withdraw(self, amount):
11
self should always be bound to an instance of the Account class
SLIDE 82
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance def withdraw(self, amount): if amount > self.balance:
11
self should always be bound to an instance of the Account class
SLIDE 83
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance def withdraw(self, amount): if amount > self.balance: return 'Insufficient funds'
11
self should always be bound to an instance of the Account class
SLIDE 84
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance def withdraw(self, amount): if amount > self.balance: return 'Insufficient funds' self.balance = self.balance - amount
11
self should always be bound to an instance of the Account class
SLIDE 85
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance def withdraw(self, amount): if amount > self.balance: return 'Insufficient funds' self.balance = self.balance - amount return self.balance
11
self should always be bound to an instance of the Account class
SLIDE 86
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance def withdraw(self, amount): if amount > self.balance: return 'Insufficient funds' self.balance = self.balance - amount return self.balance These def statements create function objects as always, but their names are bound as attributes of the class
11
self should always be bound to an instance of the Account class
SLIDE 87
Methods
Methods are functions defined in the suite of a class statement class Account: def __init__(self, account_holder): self.balance = 0 self.holder = account_holder def deposit(self, amount): self.balance = self.balance + amount return self.balance def withdraw(self, amount): if amount > self.balance: return 'Insufficient funds' self.balance = self.balance - amount return self.balance These def statements create function objects as always, but their names are bound as attributes of the class
11
self should always be bound to an instance of the Account class s
SLIDE 88
Invoking Methods
12
SLIDE 89
Invoking Methods
All invoked methods have access to the object via the self parameter, and so they can all access and manipulate the object's state
12
SLIDE 90
Invoking Methods
All invoked methods have access to the object via the self parameter, and so they can all access and manipulate the object's state class Account: ... def deposit(self, amount): self.balance = self.balance + amount return self.balance
12
SLIDE 91
Invoking Methods
All invoked methods have access to the object via the self parameter, and so they can all access and manipulate the object's state class Account: ... def deposit(self, amount): self.balance = self.balance + amount return self.balance Defined with two parameters
12
SLIDE 92
Invoking Methods
All invoked methods have access to the object via the self parameter, and so they can all access and manipulate the object's state class Account: ... def deposit(self, amount): self.balance = self.balance + amount return self.balance Dot notation automatically supplies the first argument to a method Defined with two parameters
12
SLIDE 93
Invoking Methods
All invoked methods have access to the object via the self parameter, and so they can all access and manipulate the object's state class Account: ... def deposit(self, amount): self.balance = self.balance + amount return self.balance >>> tom_account = Account('Tom') >>> tom_account.deposit(100) 100 Dot notation automatically supplies the first argument to a method Defined with two parameters
12
SLIDE 94
Invoking Methods
All invoked methods have access to the object via the self parameter, and so they can all access and manipulate the object's state class Account: ... def deposit(self, amount): self.balance = self.balance + amount return self.balance >>> tom_account = Account('Tom') >>> tom_account.deposit(100) 100 Dot notation automatically supplies the first argument to a method Invoked with one argument Defined with two parameters
12
SLIDE 95
Invoking Methods
All invoked methods have access to the object via the self parameter, and so they can all access and manipulate the object's state class Account: ... def deposit(self, amount): self.balance = self.balance + amount return self.balance >>> tom_account = Account('Tom') >>> tom_account.deposit(100) 100 Dot notation automatically supplies the first argument to a method Invoked with one argument Defined with two parameters
12
Bound to self
SLIDE 96
Dot Expressions
13
SLIDE 97
Dot Expressions
Objects receive messages via dot notation
13
SLIDE 98
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class
13
SLIDE 99
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name>
13
SLIDE 100
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name> The <expression> can be any valid Python expression
13
SLIDE 101
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name> The <expression> can be any valid Python expression The <name> must be a simple name
13
SLIDE 102
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name> The <expression> can be any valid Python expression The <name> must be a simple name Evaluates to the value of the attribute looked up by <name> in the object that is the value of the <expression>
13
SLIDE 103
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name> The <expression> can be any valid Python expression The <name> must be a simple name Evaluates to the value of the attribute looked up by <name> in the object that is the value of the <expression> tom_account.deposit(10)
13
SLIDE 104
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name> The <expression> can be any valid Python expression The <name> must be a simple name Evaluates to the value of the attribute looked up by <name> in the object that is the value of the <expression> tom_account.deposit(10) Dot expression
13
SLIDE 105
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name> The <expression> can be any valid Python expression The <name> must be a simple name Evaluates to the value of the attribute looked up by <name> in the object that is the value of the <expression> tom_account.deposit(10) Dot expression Call expression
13
SLIDE 106
Dot Expressions
Objects receive messages via dot notation Dot notation accesses attributes of the instance or its class <expression> . <name> The <expression> can be any valid Python expression The <name> must be a simple name Evaluates to the value of the attribute looked up by <name> in the object that is the value of the <expression> tom_account.deposit(10) Dot expression Call expression
13
(Demo)
SLIDE 107
Attributes
(Demo)
SLIDE 108
Accessing Attributes
15
SLIDE 109
Accessing Attributes
Using getattr, we can look up an attribute using a string
15
SLIDE 110
Accessing Attributes
Using getattr, we can look up an attribute using a string >>> getattr(tom_account, 'balance') 10
15
SLIDE 111
Accessing Attributes
Using getattr, we can look up an attribute using a string >>> getattr(tom_account, 'balance') 10 >>> hasattr(tom_account, 'deposit') True
15
SLIDE 112
Accessing Attributes
Using getattr, we can look up an attribute using a string >>> getattr(tom_account, 'balance') 10 >>> hasattr(tom_account, 'deposit') True getattr and dot expressions look up a name in the same way
15
SLIDE 113
Accessing Attributes
Using getattr, we can look up an attribute using a string >>> getattr(tom_account, 'balance') 10 >>> hasattr(tom_account, 'deposit') True getattr and dot expressions look up a name in the same way Looking up an attribute name in an object may return:
15
SLIDE 114
Accessing Attributes
Using getattr, we can look up an attribute using a string >>> getattr(tom_account, 'balance') 10 >>> hasattr(tom_account, 'deposit') True getattr and dot expressions look up a name in the same way Looking up an attribute name in an object may return:
- One of its instance attributes, or
15
SLIDE 115
Accessing Attributes
Using getattr, we can look up an attribute using a string >>> getattr(tom_account, 'balance') 10 >>> hasattr(tom_account, 'deposit') True getattr and dot expressions look up a name in the same way Looking up an attribute name in an object may return:
- One of its instance attributes, or
- One of the attributes of its class
15
SLIDE 116
Methods and Functions
16
SLIDE 117
Methods and Functions
Python distinguishes between:
16
SLIDE 118
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
16
SLIDE 119
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked
16
SLIDE 120
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method
16
SLIDE 121
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit)
16
SLIDE 122
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit) <class 'function'>
16
SLIDE 123
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit) <class 'function'> >>> type(tom_account.deposit)
16
SLIDE 124
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit) <class 'function'> >>> type(tom_account.deposit) <class 'method'>
16
SLIDE 125
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit) <class 'function'> >>> type(tom_account.deposit) <class 'method'> >>> Account.deposit(tom_account, 1001) 1011
16
SLIDE 126
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit) <class 'function'> >>> type(tom_account.deposit) <class 'method'> >>> Account.deposit(tom_account, 1001) 1011 >>> tom_account.deposit(1004) 2015
16
SLIDE 127
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit) <class 'function'> >>> type(tom_account.deposit) <class 'method'> >>> Account.deposit(tom_account, 1001) 1011 >>> tom_account.deposit(1004) 2015
16
Function: all arguments within parentheses
SLIDE 128
Methods and Functions
Python distinguishes between:
- Functions, which we have been creating since the beginning of the course, and
- Bound methods, which couple together a function and the object on which that
method will be invoked Object + Function = Bound Method >>> type(Account.deposit) <class 'function'> >>> type(tom_account.deposit) <class 'method'> >>> Account.deposit(tom_account, 1001) 1011 >>> tom_account.deposit(1004) 2015
16
Function: all arguments within parentheses Method: One object before the dot and
- ther arguments within parentheses
SLIDE 129
Looking Up Attributes by Name
<expression> . <name>
17
SLIDE 130
Looking Up Attributes by Name
<expression> . <name> To evaluate a dot expression:
17
SLIDE 131
Looking Up Attributes by Name
<expression> . <name> To evaluate a dot expression: 1. Evaluate the <expression> to the left of the dot, which yields the object of the dot expression
17
SLIDE 132
Looking Up Attributes by Name
<expression> . <name> To evaluate a dot expression: 1. Evaluate the <expression> to the left of the dot, which yields the object of the dot expression 2. <name> is matched against the instance attributes of that object; if an attribute with that name exists, its value is returned
17
SLIDE 133
Looking Up Attributes by Name
<expression> . <name> To evaluate a dot expression: 1. Evaluate the <expression> to the left of the dot, which yields the object of the dot expression 2. <name> is matched against the instance attributes of that object; if an attribute with that name exists, its value is returned 3. If not, <name> is looked up in the class, which yields a class attribute value
17
SLIDE 134
Looking Up Attributes by Name
<expression> . <name> To evaluate a dot expression: 1. Evaluate the <expression> to the left of the dot, which yields the object of the dot expression 2. <name> is matched against the instance attributes of that object; if an attribute with that name exists, its value is returned 3. If not, <name> is looked up in the class, which yields a class attribute value 4. That value is returned unless it is a function, in which case a bound method is returned instead
17
SLIDE 135
Class Attributes
18
SLIDE 136
Class Attributes
Class attributes are "shared" across all instances of a class because they are attributes
- f the class, not the instance
18
SLIDE 137
Class Attributes
Class attributes are "shared" across all instances of a class because they are attributes
- f the class, not the instance
class Account: interest = 0.02 # A class attribute def __init__(self, account_holder): self.balance = 0 self.holder = account_holder # Additional methods would be defined here
18
SLIDE 138
Class Attributes
Class attributes are "shared" across all instances of a class because they are attributes
- f the class, not the instance
class Account: interest = 0.02 # A class attribute def __init__(self, account_holder): self.balance = 0 self.holder = account_holder # Additional methods would be defined here
18
>>> tom_account = Account('Tom')
SLIDE 139
Class Attributes
Class attributes are "shared" across all instances of a class because they are attributes
- f the class, not the instance
class Account: interest = 0.02 # A class attribute def __init__(self, account_holder): self.balance = 0 self.holder = account_holder # Additional methods would be defined here
18
>>> tom_account = Account('Tom') >>> jim_account = Account('Jim')
SLIDE 140
Class Attributes
Class attributes are "shared" across all instances of a class because they are attributes
- f the class, not the instance
class Account: interest = 0.02 # A class attribute def __init__(self, account_holder): self.balance = 0 self.holder = account_holder # Additional methods would be defined here
18
>>> tom_account = Account('Tom') >>> jim_account = Account('Jim') >>> tom_account.interest 0.02
SLIDE 141
Class Attributes
Class attributes are "shared" across all instances of a class because they are attributes
- f the class, not the instance
class Account: interest = 0.02 # A class attribute def __init__(self, account_holder): self.balance = 0 self.holder = account_holder # Additional methods would be defined here The interest attribute is not part of the instance; it's part of the class!
18
>>> tom_account = Account('Tom') >>> jim_account = Account('Jim') >>> tom_account.interest 0.02
SLIDE 142
Class Attributes
Class attributes are "shared" across all instances of a class because they are attributes
- f the class, not the instance
class Account: interest = 0.02 # A class attribute def __init__(self, account_holder): self.balance = 0 self.holder = account_holder # Additional methods would be defined here The interest attribute is not part of the instance; it's part of the class!
18