CS156
Chris Pollett
Sep 15, 2014
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
class Stack(object): #this says stack inherits from object
a_class_variable = 5 # this var behaves like a Java static var
def __init__(self): #self = this in Java
self.stack = [] #now stack is a field variable of Stack
#in general using self.field_var is how we declare and
#instantiate a instance variable
def push(self, object): #the first argument of any method
self.stack.append(object) # is the object itself
def pop(self):
return self.stack.pop()
@property #properties are attributes that computes its value when accessed
def length(self):
return len(self.stack)
my_instance = Stack()
my_instance.push("hello")
print my_instance.length
print isinstance(my_instance, object) #returns True
print issubclass(Stack, object) #returns True
#type(my_instance) returns Stack
...
#etc
class Stack(list):
def push(self, object):
#could refer to parent by using syntax list.some_method_of_list
#or use super(list, self).some_method_of_list
self.append(object)
class MyClass:
@staticmethod
def my_method():
#some code
MyClass.my_method() #similar to Java
#load in abstract class module
from abc import ABCMeta, abstractmethod, abstractproperty
class MyClass:
__metaclass__ = ABCMeta # a metaclass is a class object that knows how to
# create other class objects. The default metaclass
# is type (Python 3, types.ClassType in Python 2).
# Here we are assigning ABCMeta
# to be used rather than type
# In Python 3, write MyClass(metaclass=ABCmeta)
@abstractmethod
def my_abstract_method(self):
pass
@abstractproperty
def my_abstract_property(self):
pass
class Board:
def __init__(self):
self.board = ["...", "...", "..."]
def add(self, player_piece, x, y):
if player_piece != "x" and player_piece != "o":
raise RuntimeError("Piece must be x or o")
row = ""
for i in range(3):
if i == y:
row += player_piece
else:
row += self.board[x][y]
self.board[x] = row
def draw(self):
for i in range(3):
print self.board[i]
b = Board()
b.add("x", 1, 1)
b.draw()
print
b.add("o", 0, 1)
b.draw()
Which of the following is true?
try:
statement_block_0
except SomeError1 as error_name1:
statement_block_1 #executed if a SomeError1 occurs
except SomeError2 as error_name2:
statement_block_2
...
finally:
statement_block_n # always gets executed
try:
f = open("file.txt", "r")
except IOError as e:
print e
raise RuntimeError("Something bad just happened")
class MyException(exception): pass
#now could use as:
raise MyException("Whoa! A MyException occurred!")
#more control can be had by overriding __init__
#here we define an exception taking two arguments
class MyException2(exception):
def __init__(self, errno, msg):
self.args = (errno, msg)
self.errno = errno
self.errmsg = msg
raise MyException2(403, "Access Forbidden")
import div #notice not div.py a, b = div.divide(198, 15) #notice function in div.py have to be prefixed with div.
import div as foo #now foo is the prefix
from div import divide #from div import *; would import all functions print divide(198, 15)
def fact(n):
"This function computes a factorial" #can use triple quoted strings
if(n <= 1): return 1
else: return n * fact(n - 1)
print fact.__doc__
import(test) help(test.fact)This would go to a screen that prints the documentation string.
pydoc test.factand get the same result as help(test.fact) before
def my_pow(x, y):
""" Computes x raised to the power of y
For example,
>>> my_pow(3, 4)
81
Here are some base cases:
>>> my_pow(0,0)
1
>>> my_pow(1,0)
1
>>> my_pow(2,0)
1
Since our method does something different when y is odd or even
we have a test for each case:
>>> my_pow(2,4)
16
>>> my_pow(2,5)
32
"""
if y == 0:
return 1
tmp = my_pow(x, y/2)
tmp = tmp * tmp
if y == 2 * (y / 2) :
return tmp
else :
return tmp * x
if __name__ == '__main__':
#run as the main program from command line (as opposed to imported by
#someone else
import doctest
doctest.testmod()