Nous n'utiliserons pas seulement des fragments de programme, mais nous procéderons également à l'apprentissage vers la mise en œuvre de programmes qui les combinent.
Grâce à la vaste bibliothèque et aux commentaires, j'ai réussi à réaliser la petite idée que je voulais faire et que je voulais faire. D'un autre côté, si vous essayez de les combiner pour faire un programme, le tout sera foiré et vous ne pourrez pas le gérer.
Par conséquent, ici, nous allons organiser ce que nous avons appris sur la classe et résumer diverses questions dans le but de créer un "programme qui peut être développé et maintenu par nous-mêmes". En tant que programmeur encore débutant, les conseils sont les bienvenus.
La dénomination est importante dans le programme. Si vous lui donnez un nom approprié, cela entravera votre compréhension et votre reconnaissance. Par conséquent, pour bien saisir à quoi ressemble tout cela, le degré d'abstraction doit être déterminé en fonction de la situation.
Si vous recherchez "abstraction de classe Python", la plupart des informations concernent l'utilisation des métaclasses. C'est une partie qui était étonnamment difficile à comprendre.
À titre d'exemple, imaginez la situation de créer un jeu de rôle classique de fantasy occidentale. Quel genre de nom devrions-nous donner lors de la création d'une classe qui traite d'un personnage, John, un villageois?
Tout d'abord, comme prémisse, diverses choses dans le monde appartiennent à plusieurs groupes en même temps. Bien sûr, John ne fait pas exception.
Il y a beaucoup de noms que John peut donner, juste pour un rapide coup d'œil. Un objet qui est tous les objets (terrains, arbres, bâtiments, personnages, etc.) qui existent dans le jeu. La créature est une chose vivante parmi les êtres vivants et les objets inanimés. Humanoïde, une créature humanoïde pouvant inclure des elfes et des nains ainsi que des gens ordinaires. À la suite d'un traçage sans fin parmi les créatures humanoïdes, nous arrivons au villageois John.
Quand il s'agit de "Aimeriez-vous créer Créature pour créatures pour le moment?", Je pense que la mise en œuvre sera la suivante.
creature.py
class Creature:
def __init__(self, hp, mp, start_position, area):
self.hp = hp
self.mp = mp
self.position = start_position
self.area = area
self.oxygen = 100
def move(self, next_position):
if self.area == "land":
self.walk()
self.position = next_position
elif self.area == "water":
self.swim()
self.position = next_position
elif self.area == "sky":
self.fly()
self.position = next_position
def walk(self):
print("Teku Teku")
def swim(self):
print("Sui")
def fly(self):
print("Byun")
Puisqu'il s'agit d'un groupe appelé Créature, il sera nécessaire de séparer au moins les créatures qui vivent sur le sol, les créatures qui vivent sous l'eau et les créatures qui vivent dans les airs. Considérant que les créatures vivant au sol pénètrent dans l'eau, je sens que je dois gérer la quantité d'oxygène. La gestion du poids semble être importante pour les créatures vivant dans les airs.
De plus, puisque nous pensons cette fois au monde fantastique, il est possible que certaines créatures vivent dans le monde des démons contaminés par l'humour, et certaines vivent dans le sol où il n'y a pas de lumière. Parallèlement à cela, on peut s'attendre à ce que le nombre de choses à mettre en œuvre augmente à un rythme accéléré, comme les différentes méthodes de mouvement et l'établissement d'un statut unique.
Si vous pensez, "à part le reste, voulez-vous le garder en tant que villageois?", Je pense que la mise en œuvre sera la suivante.
villager.py
class Villager:
def __init__(self, name, hp, start_position):
self.name = name
self.hp = hp
self.position = start_position
def move(self, next_position):
self.position = next_position
print("Teku Teku")
def speak(self, line="Bonjour. C'est le village de départ"):
print(f"{self.name}「{line}」")
villagerA = Villager("John", 100, [0,0])
villagerA.speak()
villagerA.speak("D'où viens-tu?")
#Résultat d'exécution
'''
John "Bonjour. C'est le village du début."
John "D'où viens-tu?"
'''
C'est différent du précédent, et ce n'est que pour les villageois, il est donc facile de réfléchir à ce qu'il faut mettre en œuvre. Si vous le traitez comme un PNJ, vous devriez vous en promener de manière appropriée et, lorsque vous lui parlez, prononcez les lignes appropriées.
D'un autre côté, il y a une volonté de le mettre en œuvre proprement. Par exemple, lorsque vous envisagez de créer une ville-château et d'y placer des PNJ, ce villageois semble être utilisé avec un peu de bricolage. La fonction de base de bouger et de parler reste la même.
Compte tenu de l'extensibilité plus tard, il semble que le nom Villager n'est pas le meilleur. Essayez de subdiviser le salon ou ajoutez des caractéristiques à chaque espace de vie. C'est une extension comme créer un enfant qui ne peut pas attaquer pour donner une variation, ou un voyou qui peut attaquer.
Alors qu'est-ce qu'un nom avec le bon degré d'abstraction qui n'est ni trop haut ni trop bas? Cela peut changer autant que vous le souhaitez en fonction des spécifications, mais les points raisonnables sont les suivants.
resident.py
class Resident:
def __init__(self, name, hp, start_position):
self.name = name
self.hp = hp
self.position = start_position
def move(self, next_position):
self.position = next_position
def speak(self, line="Bonjour"):
print(f"{self.name}「{line}」")
citizenA = Resident("John", 100, [0,0])
citizenA.speak()
villagerA = Resident("Mary", 100, [0,10])
villagerA.speak("Bonjour. Est-ce que c'est South City?")
#Résultat d'exécution
'''
John "Bonjour"
Mary "Bonjour. Est-ce une ville du sud?"
'''
Je l'ai nommé résident parce qu'il vit quelque part. Cela inclut les villageois et les citoyens. Il peut être acceptable de créer un citoyen de la ville aérienne.
Plus le niveau d'abstraction est élevé, plus il y a de choses à mettre en œuvre. En prenant un véhicule comme exemple, si vous essayez de le mettre en œuvre en tant que transport au lieu de voiture, il inclura les avions et les navires, et la quantité de mise en œuvre augmentera à nouveau.
D'autre part, abaisser le degré d'abstraction réduit la quantité de travail à mettre en œuvre, mais réduit naturellement la plage d'utilisation. De même, en prenant un véhicule comme exemple, la mise en œuvre de Bus au lieu de Car réduira la portée de l'examen et facilitera la mise en œuvre. D'un autre côté, compte tenu de l'application à Taxi, qui transporte également des clients, il faudra encore du temps et des efforts.
À partir de la prochaine fois, nous prévoyons de résumer la classe de base abstraite et l'héritage et la synthèse / délégation.
Recommended Posts