180 likes | 387 Views
Objects and classes. Classes Act as blueprints Objects are instantiated from classes Encapsulate data : Attributes Encapsulate function : Methods Ideal for modeling real-world phenomena. Summary. Class header
E N D
Objects and classes • Classes • Act as blueprints • Objects are instantiated from classes • Encapsulate data: Attributes • Encapsulate function: Methods • Ideal for modeling real-world phenomena
Summary • Class header • Keyword class begins definition, followed by name of class and colon (:) • Body of class • Indented block of code • Optional documentation string • Describes the class • Appears immediately after class header • Constructor method __init__ • Executes each time an object is created • Initialize attributes of class • Returns None • Object reference • All methods must at least specify this one parameter (self) • Represents object on which a method is called
Rational numbers in Python • Strange rounding-off errors: • Create class for representing rational numbers by storing numerator and denominator >>> 2/3.0 0.6666666666666663 >>> 2/6.0 0.3333333333333331 >>> 5/6.0 0.8333333333333337
Rational numbers Initialization: Reduced form rational.py • Use float to make sure result of division will be a float, not • a rounded down integer • Object reference self first argument in all methods • self refers to the object on which the method is called
Creating and using RationalNumber objects >>> from rational import RationalNumber >>> a = RationalNumber(3, 4) >>> b = RationalNumber(3, 6) >>> a.getValue() 0.75 >>> b.getValue() 0.5 >>> b.getNumerator() 1 >>> b.getDenominator() 2 No self argument in method calls! Python puts object reference in place of self RationalNumber b .getDenominator( )
Creating and using RationalNumber objects >>> from rational import RationalNumber >>> a = RationalNumber(3, 4) >>> b = RationalNumber(3, 6) >>> a.getValue() 0.75 >>> b.getValue() 0.5 >>> b.getNumerator() 1 >>> b.getDenominator() 2 a b numerator = 3 denominator = 4 numerator = 1 denominator = 2 class RationalNumber
Forgetting the self. prefix when referencing object attributes Initializes only local variables which go out of scope when constructor terminates!
Comparing rationals - binary search tree a elements< a elements>= a
Binary search tree a b elements< a elements>= a elements< b < a b <= elements< a
Node class from course notes binary_tree.py Use this class to represent the search tree nodes: Each data attribute will be a RationalNumber
Creating RationalNumber objects, adding them to a tree searchtree.py (part 1)
Adding a node to a binary search tree searchtree.py (part 2) node node Recursive function! rational
Testing 2/3 %:~ python –i searchtree.py Numerator: 2 Denominator: 3 Numerator: 3 Denominator: 4 Numerator: 7 Denominator: 14 Numerator: >>> root.getData().getvalue() 0.666666666666663 >>> root.getRight().getData().getvalue() 0.75 >>> root.getLeft().getData().getvalue() 0.50 1/2 3/4
Searching for a node searchtree.py (part 3) Fast searching if tree is balanced
Searching for a node, demonstration Search in big tree of random rational numbers searchtreetest.py
Numerator: 2 Denominator? 3 Closest match: 433/650 Numerator: 4 Denominator? 5 Closest match: 43/54 Numerator: 1 Denominator? 2 Closest match: 370/737 Numerator: 4 Denominator? 9 Closest match: 391/878 Numerator: 10 Denominator? 1 Closest match: 994/103 Numerator: 5 Denominator? 3 Closest match: 521/313