Prova intanto a correggere la funzione in modo che restituisca SEMPRE un risultato
Come l'hai scritta tu, nel caso $result sia false, non restituisce nè True nè False

Anche se non credo sia questo il problema... visto che il messaggio è piuttosto chiaro, nel momento in cui fa la if ( $login->checkUser( $query) ), $login non è ancora (o non è più) un oggetto

A meno che non si riferisca alla variabile $result

Secondo me il problema è il modo in cui utilizzi/confondi la proprietà "num_rows" con il metodo "num_rows"

Probabilmente la tua funzione funzionerebbe così
Codice PHP:
public function checkUser($sql) {
        if (
$this->num_rows$sql ) ){
                return 
true;
            else
                return 
false;
         }
    }