Je suis d'accord sur la solution des rôles, comme décrit par Alex. Ce que vous avez n'est pas différentes sous-classes de personnes. Vous avez différents rôles qu'une personne peut avoir. Mais je vous entends dire: "hé, le ninja peut avoir une propriété" numberOfStars ", alors qu'un chanteur peut avoir une propriété" highestNote "Identique à l'interface: un ninja peut avoir la méthode throwStar() et disparaître(), alors qu'un chanteur peut avoir chanté() et getWasted(), et le bassiste peut avoir goFunky() et slapPop()
Ce que vous avez ici est un cas où votre modèle de données nécessite un schéma très lâche Si le chanteur décide de prendre la basse et d'improviser un morceau, ça va ... S'il veut jouer le rôle de ninja, et que vous appelez throwStar, il va retourner une erreur , parce qu'il n'a pas d'étoiles, mais vous pourriez en principe assigner des étoiles à un chanteur et lui faire jeter des étoiles
Dans ce que vous vous aventurez dans le monde des ontologies, plutôt que des schémas. Vous avez une ressource, qui est "quelque chose" et ce quelque chose peut être un type, avoir des propriétés, etc. La présence de certaines propriétés peut inférer le type, ou la présence de certains types peut inférer d'autres types. Vous ne pouvez pas décrire facilement cette information avec le simple modèle de données django. Ce dont vous avez besoin, c'est d'un magasin de graphes inférenciés, sensibles au contexte, comme AllegroGraph, ou implémentez votre solution piratée en utilisant rdflib.
Qu'en est-il des pirates? : P –
Sur quel type de projet travaillez-vous? Cela semble génial! Je veux être un bassiste-ninja chaotique/maléfique. –
Une fois j'ai eu un ami jouant un barde. Il est mort, son cœur a été remplacé et est devenu diabolique (ne demandez pas). De retour à la vie, il jeta le luth et prit une guitare électrique (encore une fois, ne le demandez pas) et inspira le courage en choisissant les cordes avec son couteau tout en faisant grogner le métal. Clairement, c'était génial. –