City's 28-game unbeaten run came to an end on Sunday when they lost 2-0 at home to second-place and Manchester United and were initially on the back foot as Southampton looked the more dangerous side from kick off.
Southampton's confidence wasn't dented by the setback and, just like against United, City gave away a penalty as Aymeric Laporte brought down Jannik Vestergaard. James Ward-Prowse made no mistake from the spot to level the score on 25 minutes.
City retook the lead as Riyad Mahrez capitalised on a poor Che Adams pass to rifle an effort past McCarthy and into the corner on 40 minutes, with in-form Ilkay Gundogan adding a third and effectively killing the game with a close-range finish just before half-time.
While that number proved beyond them, City did appear to be able to score at will and added a fourth 10 minutes into the second half as Mahrez got his second following a neat exchange with Foden.
However a mix-up in City's usually reliable defence allowed Adams to immediately pull one back before De Bruyne restored the Premier League leaders' three-goal advantage just before the hour mark.
The victory means City extend their lead over United to 14 points at the top of the Premier League, though having played a game more, while Southampton stay 14th.