Presentation on theme: "CIT 590 Intro to Programming Classes. Schedule change The upcoming HW (HW6) is your last major Python HW. It will involve object oriented programming."— Presentation transcript:
Schedule change The upcoming HW (HW6) is your last major Python HW. It will involve object oriented programming (Classes etc) 2 week HW Submit before spring break. No HW over spring break. Recursion and functional programming will be covered next week You will receive a small HW(worth 10 pts as opposed to the usual 20) sometime next week that needs to be completed by Mar 6. Small HW to be done individually. Small HW due same date as the larger HWs
What is a class? Easiest to understand it as the creating new data types Lists, files, dictionaries etc do not represent the world Wouldn’t it be nice if in the movie database assignment you could say something like movie.get_actors
Writing a class is like creating a template Nothing happens until you start using your class.
Classes Encapsulate functions that can be used for a common purpose bankAccount.py Classes implicitly apply the principles of abstraction and information hiding The user of the bank account class does not need to know how balance is being maintained Just get a handle to the class and use the deposit and withdrawal functions
Class definition class BankAccount(object): def __init__ (self, initBalance): self.balance = initBalance def deposit(self, amount): self.balance += amount Parent class methods
Creating an instance of the class The class definition by itself does not create an instance of the class The class definition is like the ice tray and the ‘create an instance’ is like pouring water into the ice tray and getting to set myFirstAccount = BankAccount() An instance of a class is called an object
Methods inside a class A class method looks very very much like a regular function The first argument HAS to be ‘self’ Calling methods within other methods We have to always refer to which object we are calling the method on def transfer (self, amount, toAccount): self.withdraw(amount) toAccount.deposit(amount)
Constructors (the method for creation) The __init__ is implicitly called when you say B = BankAccount() First time we are seeing the __ __ convention Python uses this when we have functions that are used behind the scenes
Objects are references => be careful Very similar to the situation of two lists The copy module is your best friend import copy bankAccount2 = copy.copy(bankAccount1) Passing an object as a function parameter Again similar to lists, the object will be modified Sometimes you want the modification Sometimes you want to copy
How to print out an object __str__ When you call print this internal function will be called. Python will always provide some kind of default However the default is ‘lame’ Try commenting out the __str__ in the bankAccount object
Accessing the data fields Python classes expose their data fields. For the bankaccount example you could always manipulate the balance data field directly BUT this is considered bad programming practice It is considered much better form to provide what is called a getter and a setter In this bank account example, a getter for balance is fully justified since that is a service you would want However a direct setting of bank balance = xyz seems inappropriate. We have deposit and withdraw More on this when we get to Java
Inheritance You’ve already seen it without it being explicitly called as such Idea = Using methods defined on the parent class Software reuse By inheriting from a class you only need to define the specialized methods Often you might be inheriting from a different developer’s class Checking account example class CheckingAccount(bankAccount.BankAccount) Checking account inherits from bankaccount Checking account is a special type of bankaccount When should I use inheritance Apply the ‘is-a’ method A real number is a complex number A checking account is a bank account
Inbuilt functions to help explore inheritance Use isinstance issubclass Using the types module (import types) You can check for an int by doing Isinstance(3, types.IntType)
The is-a versus has-a concept A common method used to identify inheritance is to ask the question ‘Is class B a special case of class A?’ If the answer is yes, B extends A. If the answer is no, then you might want one class contained inside the other – composition A Bank contains BankAccounts - composition A CheckingAccount is a BankAccount - inheritance
Your consent to our cookies if you continue to use this website.