A. C'est le langage le plus populaire en ce moment, et je pense qu'il est probablement impossible pour moi de maîtriser pleinement l'apprentissage automatique, l'IA, l'apprentissage en profondeur, etc., mais c'est une échelle de travail. Après tout, je sentais que je voulais apprendre quelque chose qui était populaire dans une certaine mesure (y compris le sens de savoir pourquoi c'était populaire). Cependant, c'est juste une question d'intérêt, et je me demande si j'apprends une nouvelle langue maintenant, même si j'ai arrêté d'utiliser PHP (Laravel), que j'avais appris comme ligne principale au départ. C'est parce que j'ai vu Saku731-san Un tel projet sur Twitter. Basé sur mon expérience d'apprentissage de PHP (Laravel) par moi-même et de la réalisation d'un livrable de la définition des exigences à la mise en œuvre
** Quel type de service dois-je rendre ** ** Qu'y a-t-il de mieux dans ce type de traitement? ** ** ** Quel type de relation les autres ont-ils avec la conception de bases de données? ** ** ** Et la sécurité? Et le refactoring? Quelle est la transaction? ** **
Je suis tombé sur un mur avec diverses choses en cours de route avec etc, et à la fin je n'avais pas à me soucier de compromettre ou d'écrire du code qui n'était pas très bon. Bien sûr, les problèmes que j'ai appris en le faisant et les choses que je dois faire à partir de maintenant peuvent être clairement vus, et peut-être même si j'étudie avec des livres de référence, etc., je ferai des choses comme partir de 1 aux manuels de Laravel dans l'ordre. Plutôt que de le faire, à ce stade de développement en utilisant réellement le framework, je pense qu'il sera plus efficace de scanner l'introduction du framework PHP Laravel et PU là où il est insuffisant. Je suis. Pendant ce temps, j'ai vérifié ce que c'était dans une librairie, mais il s'est avéré que quelque chose d'inattendu avait été écrit. Depuis que je travaille, je n'ai pas changé car je n'ai pas assez d'argent ... Cependant, à la fin, de telles brosses individuelles peuvent être effectuées autant que vous le souhaitez en pêchant la mer d'Internet pour environ 3000 yens à Techpit à l'heure actuelle, mais maintenant je trouve en fait un emploi d'ingénieur inexpérimenté. Pendant que je travaille, je ne trouve pas ce genre d'expérience utile, même si c'est plusieurs fois mieux que rien. C'est comme un filtre «d'éducation» dans la recherche d'emploi normale. Les entreprises paient également des frais de location pas chers, j'ai donc appris dès le début qu'il est de notoriété publique qu'environ 30 à 60% du revenu annuel des personnes nommées par l'intermédiaire d'agents sont pris comme une marge. Dans de telles circonstances, il n'y a aucun mérite à prendre une personne qui n'a même pas d'expérience en tant que membre de la société et qui n'a pas «l'expérience de la clôture d'un projet en travail réel = codage au niveau de la production et expérience de développement» au milieu. Après tout, après avoir payé pour l'embauche, vous devez investir dans l'éducation. Lorsqu'il s'agit de prendre de telles ressources humaines, il y a un endroit où vous pouvez ressentir le potentiel de cette ressource humaine et l'anticiper, ou vous voulez utiliser ces ressources humaines et vous éduquer, ou vous avez la force physique d'éduquer, ou vous devez être inexpérimenté. Il est plus clair que de regarder le feu qu'il y a deux choix, comme le super noir. Cela me rend triste de le dire moi-même, mais je pleure actuellement et je cherche un emploi parce que c'est une vraie théorie. Au fait, j'ai l'impression d'aller vers ce dernier.
Parler calmement, eh bien, avec un tel contexte, je me suis souvenu de la limite du «développement par moi-même», mais heureusement j'ai vu le plan ci-dessus.
Contexte de lancement du projet: Même si je veux changer d'emploi ou déménager dans un autre département et étudier la programmation, il y a beaucoup de choses que je ne peux pas avoir une chance sans expérience pratique. Cependant, si vous avez le matériel pour convaincre l'environnement (= service qui fonctionne réellement), vous pouvez recevoir la même évaluation que «expérience de travail». Je voudrais créer un endroit où les personnes qui ont étudié dur jusqu'à présent peuvent obtenir des "services réellement professionnels" et une "expérience dans le développement d'équipe" sans risque. C'est le contexte du lancement du projet. Tout ce dont vous avez besoin est «la volonté de changer votre vie avec la programmation».
Je me demande si vous pouvez lire l'intention du projet et lui donner l'expérience que vous recherchez maintenant. J'ai pensé, et quand je me suis renseigné, au moins, même si je n'avais aucune expérience, si je pouvais écrire en examinant Bootstrap et Python, c'était OK de participer (cependant, au minimum), alors j'ai commencé à apprendre Python à cette occasion. C'est l'arrière-plan de. En fait, c'est une ligne pour rafraîchir PHP (Laravel), et comme il est normal de créer des livrables et de cloner d'autres choses, j'aimerais le faire comme une pratique pour créer de plus en plus d'applications, mais j'aimerais le faire. La question de savoir s'il faut laisser un certain intérêt tel quel et surtout ** Il y a un endroit devant vous où vous pouvez obtenir un "service réellement opérationnel" et une "expérience de développement d'équipe" sans risque **, mais vous pouvez le transmettre Je ne pouvais tout simplement pas le faire. Je ne pense pas que ce soit correct de penser que ce n'est qu'un changement, mais j'espère que vous pouvez comprendre au début que vous avez un sens solide du but.
J'ai fait quelque chose comme ça dans une certaine mesure
Je comprends les bases de la conception de fonctions / classes / bases de données en PHP - quelque peu avancées, et bien qu'il soit difficile d'écrire par moi-même, pensez-vous que vous pouvez comprendre ce qui est écrit? S'agit-il de savoir si les débutants obtiendront leur diplôme et entreront dans un PHP intermédiaire complet du débutant à intermédiaire PHP? Je pense. Après tout, c'est toujours du papier.
Pour le moment, je veux terminer le didacticiel Django à un niveau où je peux faire ce que j'ai fait avec PHP avec Python d'ici mai, donc je sortirai à peu près ce que j'ai fait en un peu plus d'un mois en tant que révision Je vais continuer. Je ne sais pas quel sera le niveau des participants, mais je suis définitivement en bas, et bien que ce soit une partie de la mise en œuvre comme un rôle à attribuer, je peux contribuer sans alourdir le plus possible l'équipe. Je veux être, alors je veux faire de mon mieux. Au contraire, cette expérience peut être en mesure de se réduire à PHP. Cette fois, je vais énumérer les parties de base des bases de Python.
Pour le moment, ce qui me semble le plus différent de PHP, c'est le mécanisme d'importation et le module.
Un module est un fichier dans lequel les fonctions et les classes sont écrites ensemble en Python, et ressemble à une soi-disant bibliothèque.
Bien sûr, certains sont intégrés et vous pouvez créer les vôtres.
Le répertoire contenant le module et le fichier __init __. Py
est appelé un package.
Vous pouvez écrire le code d'initialisation dans __init __. Py
.
Il existe également un mécanisme appelé package d'espace de noms qui n'inclut pas __init __. Py
, mais ici, il est important de comprendre qu'un package est comme ça.
Je suppose que c'est similaire au fonctionnement de l'espace de noms en PHP et Laravel.
En tant qu'utilisation réelle
python
import datetime
#Ou
from datetime import datetime, timedelta, timezone
Décrivez comme ça.
Lors de l'importation de plusieurs modules, séparez-les par des virgules comme dans le dernier exemple.
Le premier importe le module en tant qu'objet de type module.
En faisant cela, vous pouvez utiliser les fonctions et variables définies dans le module telles que nom du module.fonction nom
et nom du module.nom de la variable
.
Ce dernier peut aller plus loin et importer directement les objets du module individuellement.
Par conséquent, le premier signifie que l'ensemble du module datetime est importé, et le second signifie que seuls l'objet datetime, l'objet timedelta et l'objet timezone du module datetime sont importés.
À propos, le module datetime est un module qui peut gérer la date et l'heure en Python.
python
import random
number = random.randint(1,3)*100
print("Ton score est" + str(nunmber) + "Est le point")
if number == 300:
print("félicitations")
else:
print("De")
L'exemple ci-dessus est un exemple d'importation d'un module aléatoire et d'utilisation de la fonction randint pour écrire un traitement de branchement conditionnel basé sur celui-ci. La fonction randint est une fonction qui renvoie une valeur arbitraire à partir de la plage d'arguments spécifiée, la multiplie par 100, l'assigne à la variable numérique, la convertit en une chaîne de caractères avec str et la renvoie. En PHP, l'instruction if est exprimée sous la forme de ʻif (expression conditionnelle) {} `, mais en Python, la partie {} est exprimée en augmentant ou en abaissant l'intention. Vous n'avez pas besoin de points-virgules en PHP, mais assurez-vous d'ajouter des deux points aux instructions conditionnelles.
python
for i in range(0,16):
print(str(i))
#Dans le cas de while
i = 0
while i <= 5:
print(str(i))
i = i + 1 #Avancez la variable du compteur
En Python, un tableau s'appelle une liste.
python
#liste
monster = ['Vase','Loup','zombi','vampire','fantôme']
#Ajouter un élément à la fin de la liste
monster.append('Golem')
print(monster)
##Résultat de sortie
['Vase','Loup','zombi','vampire','fantôme','Golem']
#Supprimer un élément de liste
monster = ['Vase','Loup','zombi','vampire','fantôme']
monster.pop(1) #Spécifiez l'index
print(monster)
##Résultat de sortie
['Vase','zombi','vampire','fantôme']
#Répéter la liste
numbers = [12,34,56,78,90]
total = 0
for num in range(0,len(numbers))
total = total + numbers[nums]
print(total)
##Résultat de sortie
270
#Diviser et lister les éléments
team_str = "Courageux,guerrier,Ninja,sorcier"
print(team_str.split(","))
##Résultat de sortie
['Courageux', 'guerrier', 'Ninja', 'sorcier']
str = "One cold rainy day when my father was a little boy he met an old alley cat on his street"
print(len(str.split(" ")))
##Résultat de sortie
20 #Vous avez compté le nombre d'éléments qui ont été divisés et listés, dans ce cas combien il y a de mots.
url_str = input().rstrip()(L'entrée est https://www.yahoo.co.jp/Si c'était un exemple)
print(url_str.split("/"))
##Résultat de sortie
['https:', '', 'www.yahoo.co.jp', 'example']
len () est une fonction qui renvoie le nombre de caractères et le nombre d'éléments. Une fonction qui sépare les chaînes de caractères avec le symbole spécifié dans l'argument avec str.split () et le stocke dans une liste.
Un dictionnaire est une relation «clé: valeur», c'est-à-dire une liste qui stocke des propriétés, et est ce que l'on appelle un tableau associatif.
python
#Représentation du dictionnaire
{'red':'apple','blue':'sea','green':'leaf','yellow':'lemon'}
#Supprimer l'élément du dictionnaire
enemies = {"Zako":"Vase", "Boss moyen":"Dragon", "Las Boss":"Diable"}
del enemies['Zako'] #Spécifier la clé
→enemies = { "Boss moyen":"Dragon", "Las Boss":"Diable"}
#Boucle de dictionnaire(*1)
enemies = {"Zako":"Vase", "Boss moyen":"Dragon", "Las Boss":"Diable"}
for rank in enemies:
print(enemies[rank])
##Résultat de sortie
Vase
Dragon
Diable
#Lors de la mise en boucle des clés et des valeurs en même temps(*2)
for(rank,enemy) in enemies.items():
print(str(rank) + 'Est' + str(enemy) + 'est')
#Obtenez l'index en même temps dans la boucle de liste
team = ['Courageux','guerrier','sorcier',]
for(i,person) in enumerate(team):
print(str(i+1) + 'Seconde' + person) #i est l'index et la personne est l'élément.
##Résultat de sortie
Zako est un slime
Le boss du milieu est un dragon
Las Boss est le roi démon
Comme vous pouvez le voir, contrairement à PHP, les instructions Python for ne définissent pas les variables de compteur séparément comme for (i = 0; i <10; i ++)
, mais comme les instructions foreach, les listes, les dictionnaires, etc. Les éléments de l'objet de sont affectés aux variables dans l'ordre et le traitement est effectué.
Si vous regardez * 1 et * 2 dans l'exemple ci-dessus, vous pouvez voir quel type de traitement est effectué.
En d'autres termes, dans le cas de * 1, les éléments des ennemis sont affectés un par un à la variable de rang, et le traitement est effectué là où l'intensité est réduite, mais dans le cas du dictionnaire à ce moment, il est affecté à la variable de rang. Puisqu'il s'agit de la partie clé, le résultat de sortie est comme décrit ci-dessus.
Dans le cas de * 2, en spécifiant deux variables après for, rang → clé et ennemi → valeur sont attribués respectivement et bouclés en même temps.
N'oubliez pas d'utiliser ʻitems () lorsque vous voulez attribuer une valeur à une variable. Pour éviter toute confusion ici, ʻitems ()
est utilisé pour obtenir la clé et la valeur d'un élément en même temps dans un dictionnaire, ou seulement la valeur, mais ʻenumerate ()` est juste un élément tel qu'une liste et un index ( L'ordre dans lequel la liste est stockée) est acquis en même temps.
python
#liste
apples = [1,100,1000,10000]
print(sorted(apples))
##Résultat de sortie
[1, 100, 1000, 10000]
example = ['1.apple','4.apple','3.lemon','2.apple']
print(sorted(example))
##Résultat de sortie
['1.apple','2.apple','3.lemon','4.apple']
## reverse=Si True est spécifié, il sera trié dans l'ordre inverse.
print(sorted(example, reverse=True))
##Résultat de sortie
['4.apple', '3.lemon', '2.apple', '1.apple']
#dictionnaire
japan = {"kanagawa" : 10, "osaka" : 20, "okinawa":30}
print(sorted(japan))
##Résultat de sortie
['kanagawa', 'okinawa', 'osaka']
##Sortir la valeur ensemble
Si vous souhaitez afficher la valeur ensemble
print(sorted(japan.items()))
##Résultat de sortie
[('kanagawa', 10), ('okinawa', 30), ('osaka', 20)]
Dans le cas des valeurs numériques, la taille des valeurs numériques est triée, dans le cas des caractères alphabétiques, par ordre alphabétique, et dans le cas de katakana / hiragana, dans l'ordre de AIUEO. Cependant, dans le cas des kanji, l'ordre est le code du caractère, pas l'ordre de lecture. La priorité est nombre> chaîne de caractères.
python
#Essayez de régénérer la liste avec pour.
team = ['Courageux','guerrier','sorcier',]
newteam= []
for person in team:
newteam.append('10 ans plus tard' + person)
print(newteam)
##Résultat de sortie
['Héros 10 ans plus tard', 'Guerrier 10 ans plus tard', 'Wizard 10 ans plus tard']
#Version avancée
numbers = [i*2 for i in range(10)]
print(numbers)
##Résultat de sortie
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
##Appliquons-le plus loin
numbers2 = [[1 for i in range(3)] for j in range(4)]
print(numbers2)
##Résultat de sortie
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
Pour créer simplement une liste, stockez l'élément dans []
et affectez-le à une variable.
Comme mentionné ci-dessus, la liste peut être régénérée en stockant une autre liste dans une liste vide d'une autre variable à l'aide de l'instruction for.
Pour la partie appliquée, une méthode pour étendre l'instruction for avec []
au stade de l'affectation à une variable et de la création d'une liste en y générant les éléments de la liste.
En tant que mécanisme, c'est «[element for i in range ()]» que vous voulez stocker à plusieurs reprises.
En d'autres termes, l'élément spécifié avant pour est stocké à plusieurs reprises dans la liste par la quantité de plage, donc dans ce cas, plage (10) = 0 à 9 est affectée à i et la valeur doublée est affectée. Comme il sera stocké à plusieurs reprises dans la liste en tant qu'élément, le résultat de sortie sera comme indiqué ci-dessus.
Et si vous l'appliquez davantage, vous pouvez créer une liste en deux dimensions.
Le mécanisme est [[element for i in range () for j in range ()]]
, et la partie de for j in range ()
fait la liste spécifiée avant for. Cela signifie que.
Cela peut être utile lorsque vous souhaitez faire une simple liste de nombres.
Même en Python, les instructions for peuvent être imbriquées.
python
letters = [[[0,0,1,1,0,0],
[0,1,0,0,1,0],
[1,0,0,0,0,1],
[1,1,1,1,1,1],
[1,0,0,0,0,1],
[1,0,0,0,0,1]],
[[1,1,1,1,1,0],
[1,0,0,0,0,1],
[1,1,1,1,1,0],
[1,0,0,0,0,1],
[1,0,0,0,0,1],
[1,1,1,1,1,0]],
[[0,1,1,1,1,0],
[1,0,0,0,0,1],
[1,0,0,0,0,0],
[1,0,0,0,0,0],
[1,0,0,0,0,1],
[0,1,1,1,1,0]]]
for i in letters: #Répétez le processus ci-dessous
for line in i: #Répétez le processus ci-dessous
for dot in line: #Traitement pour changer en point
if dot == 1:
print('@',end='')
else:
print(' ',end='')
print()
print() #Casser chaque index à deux chiffres de la liste.
Cet exemple est un processus de création d'une image à points en convertissant 0 ou 1 en symbole correspondant à l'aide d'une liste cubique. Premier. Effectue le processus de conversion de 0 ou 1 en points (symboles correspondants ou espaces demi-largeur). Et faites-le avec chaque liste principale de la liste. De plus, puisque la liste principale est stockée dans chaque liste secondaire, le processus consiste à démarrer une nouvelle ligne après avoir exécuté chaque liste secondaire.
Les arguments de longueur variable sont des arguments lorsque * est ajouté à l'argument lorsque le nombre d'arguments est inconnu, ou ** est ajouté lorsque la propriété doit être utilisée comme argument. Par exemple, dans les cas suivants
python
def introduce(**people):
for name, greeting in people.items():
print("je" + name + "est." + greeting)
introduce(hero = "Ravi de vous rencontrer", villager = "Bonjour", soldier = "Je vous remercie")
##Résultat de sortie
Par exemple, dans la fonction ci-dessus, supposons que vous souhaitiez changer la manière de saluer en fonction de la position avec l'argument qui a été fait par les personnes.
Ensuite, comme il est pratique de rendre l'argument indéfini, utilisez un argument de longueur variable.
Dans ce cas, nous voulons utiliser la propriété comme argument, alors définissez-la sur ** people
.
Ensuite, people = [hero: 'Ravi de vous rencontrer', villageois: 'Bonjour', soldat: 'Merci' 'car
il est possible de définir l'argument comme tel, l'argument lors de l'appel de la fonction après cela Cela signifie que vous devriez le faire comme ça.
python
#une fonction
def say_hello():
print('hello' )
say_hello()
##Résultat de sortie
hello
#classe
class Greeting:
def __init__(self, name):#Ecrire un constructeur en Python
self.name = name
def say_hello(self):
print('hello' + self.name)
##Appeler une classe
test = Greeting('world')
test.say_hello()
##résultat
hello world
Le contenu de traitement de la fonction est défini comme def function name ():
et le contenu est abaissé à partir de là.
Il est facile de ne pas écrire {}.
Dans le cas d'une classe, en plus de cela, définissez la fonction comme une méthode avec nom de classe de classe
.
La méthode d'appel est la même que PHP, et vous pouvez l'assigner à une variable et en faire un objet.
De plus, self
est quelque chose qui exprime sa propre instance dans la classe, comme $ this
etself ::
en PHP.
En d'autres termes, «self.name» accède à la propriété (valeur du nom) de la classe.
Par exemple, lorsque la valeur par défaut est définie dans l'argument comme indiqué ci-dessous dans la partie constructeur, l'argument n'est pas défini dans la classe de l'appel.
python
def __init__(self, name='unknown'):
##Résultat de sortie
hello unknown
Il se trouve que. Quand j'utilise réellement la classe
python
class Item:
tax = 1.08
def __init__(self, price, quantity):
self.price = price
self.quantity = quantity
def total(self):
return int(self.price * self.quantity * Item.tax)
apple = Item(120,15) #Étant donné que deux arguments sont définis dans le constructeur, spécifiez l'équivalent.
total = apple.total() #Appel de méthode
print(total)
##Résultat de sortie
1944
Ce sera comme ça.
En conclusion, le document explique ce qui suit.
Il n'y a pas de variables d'instance "privées" en Python qui ne peuvent être accédées qu'à partir d'un objet.
Cependant, il peut être traité comme un pseudo en préfixant la variable ou la méthode avec «__». Regardons l'exemple suivant.
python
class Player:
def __init__(self, job, weapon):
self.job = job
self.__weapon = weapon
def walk(self):
print(self.job + 'C'est l'aventure dans le désert')
def __attack(self, enemy):
print(self.__weapon + "alors" + enemy + "Attaquer")
player1 = Player('Fighter','Sword')
player1.walk()
player1.attack('Golem') # error
print(player1.__weapon) # error
#Accédez aux méthodes privées de l'extérieur.
class Greeting:
def __init__(self):
self.msg = 'hello'
self.target = 'paiza'
def say_hello(self):
print(self.msg + " " + self.target)
def __say_yeah(self):
print("YEAH YEAH YEAH")
player = Greeting()
player.say_hello()
player._Greeting__say_yeah() #En faisant cela, la méthode privée est appelée depuis l'extérieur de la classe.
Tout d'abord, si vous examinez les propriétés définies dans le constructeur, vous pouvez voir que la propriété du travail est publique et la propriété de l'arme est privée.
Par conséquent, print (player1 .__ arme)
ne peut pas accéder à la propriété arme
, ce qui entraîne une erreur.
Le même raisonnement s'applique à la méthode.
Puisqu'il n'est pas préférable d'accéder à la propriété de l'extérieur, il est fondamentalement préférable de la garder privée.
D'un autre côté, si vous voulez vraiment utiliser une méthode mais que vous ne pouvez pas l'appeler de l'extérieur, ce n'est pas une histoire, alors ne la rendez pas facilement privée.
Si vous voulez vraiment accéder aux méthodes privées de l'extérieur
Vous pouvez y accéder avec la description variable à laquelle l'objet est affecté._class name__private method name ()
.
python
class Box: #1
def __init__(self, item):
self.item = item
def open(self):
print("J'ai ouvert le coffre au trésor." + self.item + "Eu" +)
class ArmsBox(Box): #2
def look(self):
print("Master Sword se tient tranquillement ...")
box = Box("Herbes medicinales")
box.open()
armsbox = ArmsBox('Arc et flèche de lumière') #3
armsbox.look()
armsbox.open()
##Résultat de sortie
J'ai ouvert le coffre au trésor. J'ai une herbe médicinale
Master Sword se tient tranquillement ...
J'ai ouvert le coffre au trésor. J'ai un arc et une flèche de lumière
#Remplacement de méthode
class Box:
def __init__(self, item):
self.item = item
def open(self):
print("J'ai ouvert le coffre au trésor." + self.item + "Eu" )
class ArmsBox(Box):
def open(self):
print("Généré une arme" + "self.item" + "Eu")
##Ajouter un argument avec une valeur par défaut lors du remplacement
class ArmsBox(Box):
def open(self, skill):
print("Généré une arme." + self.item + "Eu" + self.item + "Compétences d'armes" + '\"' + skill + '\"' + "Est attaché!")
armsbox = ArmsBox('Épée Hagane')
armsbox.open('Mortel')
##Résultat de sortie
J'ai ouvert le coffre au trésor. J'ai une herbe médicinale
Généré une arme. Vous avez une épée de hagane. Compétences d'armes pour l'épée d'Hagane"Mortel"Est attaché!
#Exécuter la méthode de la classe parente telle quelle au lieu de la référencer
class Greeting:
def __init__(self):
self.msg = "hello"
self.target = "paiza"
def say_hello(self):
print(self.msg + " " + self.target)
class Hello(Greeting):
def say_hello(self):
super().say_hello() #La classe des parents dit_Appelez la méthode hello.
print("YEAH YEAH YEAH")
player = Hello()
player.say_hello()
Tout d'abord, définissez la classe parent (super classe) comme dans # 1. Cette fois, nous utiliserons la fonction constructeur pour définir la valeur initiale et la fonction l'utilisant.
Ensuite, créez une classe enfant qui hérite de la classe parent dans # 2 (sous-classe).
Cette fois, définissez une fonction qui génère un message arbitraire avec la fonction d'impression.
Après cela, appelez-le comme # 3 et utilisez-le.
Lorsque la classe est héritée, la classe enfant peut également faire référence à la méthode de la classe parent, donc la sortie est comme ci-dessus.
De plus, contrairement à PHP, la méthode de définition de l'héritage de classe en Python est écrite de manière à ce que la classe parente soit spécifiée dans l'argument de la classe.
class Nom de la classe parent (nom de la classe enfant):
Vous pouvez également remplacer les méthodes normalement. L'important est que les remplacements Python ne doivent pas nécessairement avoir le même argument et les mêmes types de retour. Par conséquent, dans l'exemple ci-dessus, il n'y a pas de problème même si la classe Box est héritée d'ArmsBox et un argument est ajouté lorsque la méthode open est remplacée.
Si vous voulez utiliser directement la méthode de la classe parent au lieu de l'hériter, utilisez super (). Le nom de la méthode de la classe parent que vous voulez utiliser ()
.
python
class Player:
__charactor_count = 0
Les variables de classe sont des variables communes dans la classe, c'est donc un problème si elles sont accessibles de l'extérieur et modifiées inutilement, il est donc préférable de les garder privées.
Bien sûr, il y a des variables de classe, donc bien sûr il y a des méthodes de classe, mais c'est un peu différent de PHP. En PHP, static a été spécifié avant la méthode, et l'appel a été effectué avec self :: method name etc. Pour Python
python
class Player:
__charactor_count = 0
@classmethod #Décorateur
def summary(cls):
print(str(Player.__charactor_count) + "Slime attaqué avec une personne")
Tout d'abord, une technique appelée décorateur est utilisée.
Le décorateur est un mécanisme qui vous permet d'ajouter de nouvelles fonctions aux fonctions déjà définies.
Certains existent et vous pouvez créer les vôtres.
Cette fois, «@ classmethod» est préparé.
Quand ceci est utilisé, l'argument de la méthode est cls (= classe elle-même)
au lieu de self (= instance elle-même)
.
À propos, il existe également une «méthode @static» liée à cela.
Utilisez @ classmethod
pour accéder aux variables de classe ou pour changer le comportement des classes héritées.
@ staticmethod
est utilisé lorsque l'opération ne change pas même à la destination d'héritage.
Dans ce cas, nous utilisons @classmethod car nous devons accéder aux variables de classe.
À propos, le moment où le comportement devrait changer est le suivant.
Devis Utilisez la méthode de classe et la méthode statique en Python
python
class Student:
def __init__(self, name, school):
self.name = name
self.school = school
self.marks = []
def average(self):
"""Renvoyer la note moyenne
Je veux accéder à la variable d'instance, j'utilise donc la méthode d'instance.
"""
return sum(self.marks) / len(self.marks)
@classmethod
def friend(cls, origin, friend_name, *args):
"""Ajoutez des amis de la même école.
Le comportement devrait changer dans la classe héritée(La classe d'héritage a une propriété de salaire)
Utilisez donc la méthode de classe.
L'argument d'initialisation de la classe enfant est*Bon à recevoir chez args
"""
return cls(friend_name, origin.school, *args)
@staticmethod
def say_hello():
"""Dites bonjour au professeur
Utilisez une méthode statique car le même comportement peut être utilisé même s'il est hérité
"""
print("Hello Teacher!")
class WorkingStudent(Student):
def __init__(self, name, school, salary):
super().__init__(name, school)
self.salary = salary
hiro = WorkingStudent("Hiro", "Stanford", 20.00)
mitsu = WorkingStudent.friend(hiro, "Mitsu", 15.00)
print(mitsu.salary)
Dans la classe parent, seuls le nom et l'école ont des propriétés, mais dans la classe enfant héritée, la propriété salaire est nouvellement ajoutée, donc le comportement change. Au fait, * args signifie recevoir n'importe quel argument de longueur variable sous forme de taple (liste de constantes). Et si un argument est défini avant cet argument *, les propriétés autres que cet argument seront regroupées dans un tap. En d'autres termes, dans ce cas, hiro et "Mitsu" correspondant à l'origine et nom_ami sont utilisés comme arguments, mais nom et scholl parmi les arguments d'initialisation de la classe enfant sont hiro = WorkingStudent ("Hiro", "Stanford", 20.00). ), Qui est utilisé comme argument dans mitsu = WorkingStudent.friend, donc il ne peut pas être résumé dans un tuple, Parce que self.salary = salaire flotte comme argument de def friend (). Vous le recevrez dans * args. En passant, si vous regardez de plus près, vous pouvez voir qu'il n'y a pas de problème même si vous remplacez la méthode constructeur de la classe parente et ajoutez un argument.
Parler silencieux, c'est-à-dire que le traitement suivant est possible.
python
class Player:
__charactor_count = 0
@classmethod
def summary(cls):
print(str(Player.__charactor_count) + "Une personne a attaqué du slime.")
def __init__(self, name):
self.name = name
Player.__charactor_count += 1
print(str(Player.__charactor_count) + "Deuxième joueur," + self.name + "Est apparu.")
def attack(self, enemy):
print(self.name + "Est" + enemy + "Attaqué!")
class Wizard(Player):
def __init__(self):
super().__init__("sorcier")
def attack(self, enemy):
self.__spell()
print(self.name + "Est" + enemy + "A tiré une flamme!")
def __spell(self):
print("Zuban!")
print("===Combattez le slime lors d'une fête===")
hero = Player("Courageux")
warrior = Player("guerrier")
wizard = Wizard()
party = [hero, warrior, wizard]
for member in party:
member.attack("Vase")
Player.summary()
##Résultat de sortie
===Combattez le slime lors d'une fête===
Le premier joueur, le courageux, est arrivé.
Le deuxième joueur, le guerrier, est arrivé.
Un troisième joueur, le magicien, est arrivé.
Les courageux ont attaqué le slime!
Le guerrier a attaqué le slime!
Zuban!
La sorcière a mis le feu au slime!
Trois personnes ont attaqué du slime.
python
try:
sauf le nom d'exception comme e:
finally:
Le processus exécuté par le bloc try, le processus lorsque le bloc d'exception correspond au nom de l'exception (partie de capture d'exception) et le bloc finally sont les processus exécutés même si l'exception est ignorée. En d'autres termes
python
try:
number = 0
print('C'est 0')
print(number / 2)
except ZeroDivisionError as e:
print(e)
finally:
print('Essayez de voir s'il y a des exceptions')
Dans le cas de la syntaxe, 0 est d'abord affecté à la variable numérique dans le bloc try. Après cela, un message est émis sur la première impression, mais une exception se produit car la seconde impression divise par 0. Par conséquent, l'exception est levée vers le bloc except, elle est interceptée et le message d'erreur est affecté à la variable e et à la sortie. Enfin, le traitement de bloc final est exécuté. Bien entendu, la variable e dans le bloc except signifie que le message d'erreur est pris comme argument.
print ('Une division de zéro s'est produite, le traitement sera abandonné')
Il peut être remplacé par n'importe quel message tel que.
Au fait, si vous «importez» les modules «traceback» et «sys», vous pouvez écrire «sys.stderr.write ()» au lieu de «print». Cela vous permet de définir un message d'erreur dans la sortie d'erreur standard, et vous pouvez remplacer le message d'erreur du côté du journal des erreurs par n'importe lequel.
Au contraire, si vous voulez envoyer le message du côté du journal des erreurs à la personne qui sort à l'écran de la même manière que la sortie avec print
, utilisez print (traceback.format_exc ())
.
Il est également possible de définir plusieurs blocs sauf pour intercepter plusieurs exceptions.
En d'autres termes
python
except Exception as e:
except ZeroDivisionError as e:
except NameError as e:
S'il est défini comme, la vérification des exceptions est effectuée dans l'ordre à partir du haut.
Cependant, comme la classe ʻExceptioncorrespond à la classe parente pour les deux classes suivantes, lors de sa définition, elle doit être décrite au début et la classe d'exception de la classe enfant doit être définie dans la couche inférieure. Dans ce cas, si une exception autre que
ZeroDivisionError et
NameError s'est produite, la classe ʻException
la rattrapera
, et les exceptions liées à la division de zéro et à la spécification de variables non définies seront la classe ici. Ce sera un processus de «lancer» vers.
python
ZeroDivisionError
#Exception en division de 0
NameError
#Exceptions transmises lors de l'appel d'une variable non définie
Vous pouvez créer le vôtre, mais bien sûr, il y en a beaucoup qui sont fournis en standard, donc lorsque vous lancez une exception, vous devez vérifier et implémenter le cas échéant.
lever le nom de la classe d'exception ()
Avec cela, il est possible de lever une exception de n'importe quelle classe d'exception, puis d'intercepter avec la classe d'exception correspondante. Vous pouvez également spécifier un message comme argument.