Python,PyQt,Pysideで書いたコードをCythonで高速化
したいと思っています。python3.5,cython'0.24.1

独立した関数レベルでは、実現したことが
あるのですが、クラスそのものを丸ごとCython化するの
は、初の試みです。必要がなかったので。
ちなみにメソッドを独立にCython
するには、もうそのクラスのメソッドからはずして、
独立した関数として、pyxモジュールに入れていました。
何のために必要としているのかというと、
大量に抽象クラスをリストとして、取得したいと思っています。
 そのために、抽象クラスをCython化し、
一つ一つの抽象クラスにかかる初期化速度を
高速化したいのです。(簡略化しています。)

 
これが、pure Pythonのコード。

from PySide import QtGui
from PySide import QtCore
import os
import sys
import re
import random
import another_module
class Haru(Saru):
    def __init__(self,parent=None):
        super(Haru,self).__init__(parent=None)       
        self.IQ = 1000000000000000000000000000000000000  
        self.waru = Waru()
        self.karu = another_module.Tree()
        self.taipei = "taipei"
        self.malaysia = "malaysia"
        self.phillipine = "phillipine"
        self.bananas = [self.taipei,self.malaysia,self.phillipine]
    def eat(self):
        takeout = random.randint(0,2)
        get_banana = self.bananas[takeout]
        self.IQ += 300000000000000000000
    def sleep(self):
        sleeping = True
        self.IQ += 100000000000000000000
        time = 0
        while sleeping:
            self.IQ += 1000000000
            time += 1
            if time == 100:
               break
class Saru:
    pass
class Daru:
    def fellows(self):
        fellows = [Haru() for i in range(300)] 
class Waru:
    pass

 このとき、単純なビルトインタイプがあるときは、どうすればいいのかわかるのですが、
 大体すべてをCython化しようとすればどうすればいいのでしょうか。
 例えば、こちらが上のコードをcython化したものです。(未実行)

from PySide import QtGui
from PySide import QtCore
import os
import sys
import re
import random
import another_module
cdef class Haru(Saru):
    def __cinit__(self,parent=None):
        super(Haru,self).__init__(parent=None)    
        cdef int IQ
        cdef str taipei,malaysia,phillipine
        cdef list bananas
        # ここ!
     cdef Waru waru
        cdef Tree karu

        self.IQ = 1000000000000000000000000000000000000  
        self.waru = Waru()
        self.karu = another_module.Tree()
        self.taipei = "taipei"
        self.malaysia = "malaysia"
        self.phillipine = "phillipine"
        self.bananas = [self.taipei,self.malaysia,self.phillipine]
    cdef void eat(self):
        cdef int takeout
        cdef str get_banana

        takeout = random.randint(0,2)
        get_banana = self.bananas[takeout]
        self.IQ += 300000000000000000000
    cdef void sleep(self):
        cdef bool sleeping
        cdef int time
        sleeping = True
        time = 0
        while sleeping:
            self.IQ += 1000000000
            time += 1
            if time == 100:
               break
class Daru:
    def fellows(self):
        fellows = [Haru() for i in range(300)] 
        return fellows
    """IQ=indulgence quality"""
class Waru:
    pass
    """infinite indulgence"""

クラスは、さまざまなタイプの複合体です。
別のモジュールを利用したり、別の自分が独自で設定した
型を使うことがよくあります。
 O'REILLY の [Cython]を読むと、
 大体このような状態であっていると思うのですが、
 抽象化インスタンスの元手となるclass自体をCython化したほうがいいでしょうか。
 それとも、下のように、抽象インスタンスを取得する関数をCython化した
 ほうがいいでしょうか?(fellowsをCython化)

cdef class Daru:
   cdef list fellows(self):
       cdef list fellows
    cdef int num = 300
       cdef int i 
       fellows = [Haru() for i in range(num)] 
        return fellows

としたり、特にこの場合は、
リストの中にあるHaruをすべて、Haru型として
宣言しておく方がいいのでしょうか。
 また、その場合いにはどう書けばいいのでしょうか。