Serializar Python objects em JSON

Alguém sabe como serializar em YAML ou JSON uma classe que contém atributos que contém outras classes?

Classe player possui o atributo Spellbook(classe que retorna uma lista com magias) e o atributo Backpack(classe que retorna uma outra lista que contém os itens,etc.) que são subclasses de uma lista.

class Player: def __init__(self,name='', *args, **kwargs):     super().__init__(*args, **kwargs)     self._name = name     self.spellbook = Spellbook(unit=self)     self.base_damage = 0     self.backpack = Backpack()     self.level = 0     self.stats = {'strength': 1, 'inteligence': 1}     self.stats_points = 5     self._up_experience = 0     self._experience = 0     self._max_health = 0     self._health = 0     self.max_mana = 0     self._mana = 0     self.base_mana_regeneration = 0     self._mana_regeneration = 0     self.potions = 4     self._defense = 0     self.base_defense = 0     self.live_status = True     self._gold = 0     self._score = 0     self.equipped_items = {         'weapon': None,         'shield': None,         'head': None,         'chest': None,         'legs': None,         'boots': None,     }     self._level_up() 

Sempre quando vai serializar ele retorna esse erro:

TypeError: Object of type Heal is not JSON serializable 

Nesse caso o erro está falando sobre a que tem no Spellbook, mas ele mostra o mesmo problema em relação aos itens.

Esta publicação aqui tem um cara que da um exemplo parecido com o que eu preciso, mas o código não funcionou comigo, fica em um loop infinito.

Serializar Objeto para JSON