# mode: run
cdef class Spam:
cdef int tons
cdef void add_tons(self, int x):
self.tons += x
cdef void eat(self):
self.tons = 0
def lift(self):
print self.tons
cdef class SubSpam(Spam):
cdef void add_tons(self, int x):
self.tons += 2 * x
def test_spam():
"""
>>> test_spam()
5
0
20
5
"""
cdef Spam s
cdef SubSpam ss
s = Spam()
s.eat()
s.add_tons(5)
s.lift()
ss = SubSpam()
ss.eat()
ss.lift()
ss.add_tons(10)
ss.lift()
s.lift()
cdef class SpamDish:
cdef int spam
cdef void describe(self):
print "This dish contains", self.spam, "tons of spam."
cdef class FancySpamDish(SpamDish):
cdef int lettuce
cdef void describe(self):
print "This dish contains", self.spam, "tons of spam",
print "and", self.lettuce, "milligrams of lettuce."
cdef void describe_dish(SpamDish d):
d.describe()
def test_spam_dish():
"""
>>> test_spam_dish()
This dish contains 42 tons of spam.
This dish contains 88 tons of spam and 5 milligrams of lettuce.
"""
cdef SpamDish s
cdef FancySpamDish ss
s = SpamDish()
s.spam = 42
ss = FancySpamDish()
ss.spam = 88
ss.lettuce = 5
describe_dish(s)
describe_dish(ss)