Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Nach Abschluss von "Einführung in Python 3" des Paiza-Lernens ~

Warum interessieren Sie sich für Python und versuchen es zu lernen?

A. Es ist momentan die heißeste Sprache und ich denke, dass es für mich wahrscheinlich unmöglich ist, maschinelles Lernen, KI, tiefes Lernen usw. vollständig zu beherrschen, aber es ist eine Skala von Dingen, die zu tun sind. Immerhin hatte ich das Gefühl, dass ich etwas lernen wollte, das bis zu einem gewissen Grad beliebt war (einschließlich der Bedeutung zu wissen, warum es beliebt war). Dies ist jedoch nur eine Frage des Interesses, und ich frage mich, ob ich jetzt eine neue Sprache lerne, auch wenn ich PHP (Laravel) nicht mehr benutze, das ich ursprünglich als Hauptzeile gelernt hatte. Dies liegt daran, dass ich Saku731-sans Ein solches Projekt auf Twitter gesehen habe. Basierend auf meiner Erfahrung, PHP (Laravel) selbst zu lernen und ein Ergebnis von der Anforderungsdefinition bis zur Implementierung zu vervollständigen

** Welche Art von Service soll ich machen ** ** Was ist besser an dieser Art der Verarbeitung? ** ** ** ** Welche Beziehung haben andere Menschen zum Datenbankdesign? ** ** ** ** Was ist mit Sicherheit? Wie wäre es mit Refactoring? Was ist die Transaktion? ** ** **

Ich bin auf dem Weg mit usw. gegen eine Wand mit verschiedenen Dingen gestoßen, und am Ende musste ich mir keine Sorgen machen, dass ich einen Kompromiss eingehen oder Code schreiben musste, der nicht sehr gut war. Natürlich sind die Probleme, die ich daraus gelernt habe, und die Dinge, die ich von nun an tun muss, klar erkennbar, und vielleicht werde ich, selbst wenn ich mit Nachschlagewerken usw. studiere, Dinge wie von 1 bis zu Laravels Lehrbüchern der Reihe nach tun. Anstatt dies zu tun, denke ich, dass es in dieser Phase der Entwicklung unter Verwendung des Frameworks effizienter sein wird, die Einführung des PHP-Frameworks Laravel und PU dort zu scannen, wo es nicht ausreicht. Ich bin. Während dieser Zeit habe ich tatsächlich überprüft, wie es in einem Buchladen war, aber es stellte sich heraus, dass etwas Unerwartetes geschrieben wurde. Seit ich arbeite, habe ich mich nicht verändert, weil ich nicht genug Geld habe ... Letztendlich können solche individuellen Auffrischungen jedoch so oft durchgeführt werden, wie Sie möchten, indem Sie in dieser Zeit im Techpit im Internet etwa 3000 Yen im Meer fischen, aber jetzt, da Sie tatsächlich einen Ingenieur ohne Erfahrung einstellen. Während ich arbeite, finde ich diese Art von Erfahrung nicht nützlich, obwohl sie um ein Vielfaches besser ist als nichts. Es ist wie ein "Bildungs" -Filter bei der normalen Jobsuche. Unternehmen zahlen auch keine billigen Kosten für die Einstellung, daher habe ich von Anfang an erfahren, dass es allgemein bekannt ist, dass etwa 30 bis 60% des Jahreseinkommens von Personen, die über Agenten ernannt werden, als Marge betrachtet werden. Unter solchen Umständen ist es nicht sinnvoll, eine Person, die nicht einmal Erfahrung als Mitglied der Gesellschaft hat und keine "Erfahrung mit dem Abschluss eines Projekts in der tatsächlichen Arbeit = Kodierung und Entwicklungserfahrung auf Produktionsebene", in die Mitte des Prozesses zu nehmen. Nachdem Sie für die Einstellung bezahlt haben, müssen Sie schließlich in Bildung investieren. Wenn es darum geht, solche Humanressourcen zu nutzen, gibt es einen Ort, an dem Sie das Potenzial dieser Humanressourcen spüren und antizipieren können, oder Sie möchten solche Humanressourcen nutzen und sich weiterbilden, oder Sie haben die körperliche Kraft, sich weiterzubilden, oder Sie müssen unerfahren sein. Es ist klarer als beim Betrachten des Feuers, dass es zwei Möglichkeiten gibt, wie zum Beispiel Superschwarz. Es macht mich traurig, es selbst zu sagen, aber ich weine gerade und suche einen Job, weil es eine wahre Theorie ist. Übrigens habe ich das Gefühl, ich gehe zu Letzterem.

Ruhiges Gespräch, na ja, mit einem solchen Hintergrund erinnerte ich mich an die Grenze der "Entwicklung von mir selbst", aber zum Glück sah ich den obigen Plan

Hintergrund des Projektstarts: Selbst wenn ich den Job wechseln oder in eine andere Abteilung wechseln und Programmieren studieren möchte, gibt es viele Dinge, die ich ohne praktische Erfahrung nicht bekommen kann. Wenn jedoch Material vorhanden ist, um die Umgebung zu überzeugen (= tatsächlich funktionierender Service), können Sie dieselbe Bewertung wie "Berufserfahrung" erhalten. Ich möchte einen Ort schaffen, an dem Menschen, die bisher hart studiert haben, ohne Risiko "tatsächlich arbeitende Dienstleistungen" und "Erfahrung in der Teamentwicklung" erhalten können. Dies ist der Hintergrund für den Start des Projekts. Alles, was Sie brauchen, ist "der Wille, Ihr Leben durch Programmieren zu verändern".

Ich frage mich, ob Sie die Absicht des Projekts lesen und ihm die Erfahrung geben können, nach der Sie jetzt suchen. Ich dachte, und als ich mich zumindest erkundigte, ob ich schreiben konnte, während ich Bootstrap und Python untersuchte, war es in Ordnung, daran teilzunehmen (zumindest jedoch), also begann ich bei dieser Gelegenheit Python zu lernen. Es ist der Hintergrund von. Eigentlich ist es eine Linie, um PHP (Laravel) aufzufrischen, und da es in Ordnung ist, Ergebnisse zu erstellen und andere Dinge zu klonen, würde ich es gerne als Übung machen, um immer mehr Apps zu erstellen, aber ich würde es gerne tun. Die Frage, ob ein bestimmtes Interesse unverändert bleiben soll und vor allem ** Es gibt einen Ort vor Ihnen, an dem Sie ohne Risiko "tatsächlich arbeitenden Service" und "Erfahrung in der Teamentwicklung" erhalten können **, aber Sie können es weitergeben Ich konnte es einfach nicht tun. Ich denke nicht, dass es in Ordnung ist, wenn Sie denken, dass es nur eine Verschiebung ist, aber ich hoffe, Sie verstehen zuerst, dass Sie einen soliden Sinn für Absichten haben.

Meine aktuelle Situation

Ich habe bis zu einem gewissen Grad so etwas gemacht

Ich verstehe die Grundlagen des Funktions- / Klassen- / Datenbankdesigns in PHP - etwas fortgeschritten, und obwohl es schwierig ist, selbst zu schreiben, haben Sie das Gefühl, dass Sie verstehen können, was geschrieben steht? Geht es darum, ob Anfänger ihren Abschluss machen und in ein komplettes PHP-Intermediate vom Anfänger zum Intermediate PHP einsteigen? Ich denke. Immerhin ist es immer noch Papier.

Was zu schreiben

Vorerst möchte ich das Django-Tutorial auf einem Niveau beenden, auf dem ich bis Mai das tun kann, was ich mit PHP mit Python getan habe. Daher werde ich ungefähr das, was ich in etwas mehr als einem Monat getan habe, als Rückblick ausgeben. Ich werde fortsetzen. Ich weiß nicht, wie hoch die Teilnehmerzahl sein wird, aber ich bin definitiv ganz unten, und obwohl es sich um einen Implementierungsteil handelt, der zugewiesen werden muss, kann ich einen Beitrag leisten, ohne das Team so stark wie möglich zu belasten. Ich möchte sein, also möchte ich mein Bestes geben. Im Gegenteil, diese Erfahrung kann möglicherweise auf PHP reduziert werden. Dieses Mal werde ich die grundlegenden Teile der Grundlagen von Python aufzählen.

Import und Module

Was sich meiner Meinung nach im Moment am meisten von PHP unterscheidet, ist der Importmechanismus und das Modul. Ein Modul ist eine Datei, in der Funktionen und Klassen in Python zusammengeschrieben werden, und ähnelt einer sogenannten Bibliothek. Natürlich sind einige eingebaut und Sie können Ihre eigenen erstellen. Das Verzeichnis, das das Modul und die Datei "__init __. Py" enthält, wird als Paket bezeichnet. Sie können den Initialisierungscode in `__init __. Py 'schreiben. Es gibt auch einen Mechanismus namens Namespace-Paket, der nicht "__init __. Py" enthält, aber hier ist es wichtig zu verstehen, dass ein Paket so ist. Ich denke, es ist ähnlich wie Namespace in PHP und Laravel funktioniert.

Als tatsächliche Verwendung

python



import datetime

#Oder

from datetime import datetime, timedelta, timezone

Schreiben Sie so. Trennen Sie beim Importieren mehrerer Module diese wie im letzteren Beispiel durch Kommas. Ersteres importiert das Modul als Modultypobjekt. Auf diese Weise können Sie die im Modul definierten Funktionen und Variablen verwenden, z. B. "Modulname.Funktionsname" und "Modulname.Variablenname". Letzterer kann noch weiter gehen und die Objekte des Moduls direkt einzeln importieren. Ersteres bedeutet daher, dass das gesamte datetime-Modul importiert wird, und letzteres bedeutet, dass nur das datetime-Objekt, das timedelta-Objekt und das timezone-Objekt des datetime-Moduls importiert werden. Das datetime-Modul ist übrigens ein Modul, das Datum und Uhrzeit in Python verarbeiten kann.

if-Anweisung

python



import random
number = random.randint(1,3)*100
print("Dein Ergebnis ist" + str(nunmber) + "Ist der Punkt")
if number == 300:
    print("Glückwunsch")
else:
    print("aus")

Das obige Beispiel ist ein Beispiel für den Import eines Zufallsmoduls und die Verwendung der Randint-Funktion zum Schreiben einer darauf basierenden bedingten Verzweigungsverarbeitung. Die Randint-Funktion ist eine Funktion, die einen beliebigen Wert aus dem angegebenen Argumentbereich zurückgibt, ihn mit 100 multipliziert, der Zahlenvariablen zuweist, ihn mit str in eine Zeichenfolge konvertiert und ausgibt. In PHP wird die if-Anweisung in Form von "if (bedingter Ausdruck) {}" ausgedrückt, in Python wird der Teil {} durch Erhöhen oder Verringern der Absicht ausgedrückt. Sie benötigen in PHP keine Semikolons, müssen jedoch bedingten Anweisungen einen Doppelpunkt hinzufügen.

Schleife

python


for i in range(0,16):
    print(str(i))

#Im Falle von while

i = 0
while i <= 5:
    print(str(i))
   i = i  + 1 #Stellen Sie die Zählervariable vor

Anordnungsliste)

In Python wird ein Array als Liste bezeichnet.

python



#aufführen
monster = ['Schleim','Wolf','Zombie','Vampir','Geist']

#Element am Ende der Liste hinzufügen

monster.append('Golem')

print(monster)

##Ausgabeergebnis

['Schleim','Wolf','Zombie','Vampir','Geist','Golem']

#Listenelement löschen


monster = ['Schleim','Wolf','Zombie','Vampir','Geist']

monster.pop(1) #Geben Sie den Index an

print(monster)

##Ausgabeergebnis

 ['Schleim','Zombie','Vampir','Geist']

#Liste wiederholen

numbers = [12,34,56,78,90]
total = 0

for num in range(0,len(numbers))
    total = total + numbers[nums]

print(total)

##Ausgabeergebnis

270

#Elemente teilen und auflisten

team_str = "Mutig,Krieger,Ninja,Magier"

print(team_str.split(","))

##Ausgabeergebnis
['Mutig', 'Krieger', 'Ninja', 'Magier']

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(" ")))

##Ausgabeergebnis
20 #Sie haben die Anzahl der Elemente gezählt, die aufgeteilt und aufgelistet wurden, in diesem Fall die Anzahl der Wörter.

url_str = input().rstrip()(Eingabe ist https://www.yahoo.co.jp/Wenn es ein Beispiel wäre)

print(url_str.split("/"))

##Ausgabeergebnis
['https:', '', 'www.yahoo.co.jp', 'example']


len () ist eine Funktion, die die Anzahl der Zeichen und die Anzahl der Elemente zurückgibt. Eine Funktion, die Zeichenfolgen usw. mit dem im Argument angegebenen Symbol mit str.split () trennt und in einer Liste speichert.

Wörterbuch (assoziatives Array)

Ein Wörterbuch ist eine Schlüssel-Wert-Beziehung, dh eine Liste, in der Eigenschaften gespeichert werden, und ein sogenanntes assoziatives Array.

python



#Wörterbuchdarstellung
{'red':'apple','blue':'sea','green':'leaf','yellow':'lemon'}

#Element aus dem Wörterbuch entfernen
enemies = {"Zako":"Schleim", "Mittlerer Chef":"Drachen", "Las Boss":"Teufel"}
del  enemies['Zako']  #Schlüssel angeben
→enemies = { "Mittlerer Chef":"Drachen", "Las Boss":"Teufel"}

#Wörterbuchschleife(*1)

enemies = {"Zako":"Schleim", "Mittlerer Chef":"Drachen", "Las Boss":"Teufel"}

for rank in enemies:
    print(enemies[rank])

##Ausgabeergebnis

Schleim
Drachen
Teufel

#Beim gleichzeitigen Schleifen von Schlüsseln und Werten(*2)
for(rank,enemy) in enemies.items():
    print(str(rank) + 'Ist' + str(enemy) + 'ist')

#Holen Sie sich den Index gleichzeitig in die Listenschleife

team = ['Mutig','Krieger','Magier',]

for(i,person) in enumerate(team):
    print(str(i+1) + 'Zweite' + person) #Ich bin der Index und Person ist das Element.


##Ausgabeergebnis

Zako ist Schleim
Der mittlere Boss ist ein Drache
Las Boss ist der Dämonenkönig

Wie Sie sehen können, definiert Python for-Anweisungen im Gegensatz zu PHP Zählervariablen nicht separat wie for (i = 0; i <10; i ++), sondern wie foreach-Anweisungen, Listen und Wörterbücher usw. Die Elemente des Objekts von werden in der Reihenfolge den Variablen zugewiesen und die Verarbeitung wird durchgeführt. Wenn Sie sich im obigen Beispiel * 1 und * 2 ansehen, können Sie sehen, welche Art von Verarbeitung ausgeführt wird. Mit anderen Worten, im Fall von * 1 werden die Elemente in Feinden nacheinander der Rangvariablen zugewiesen, und die Verarbeitung wird dort durchgeführt, wo die Intensität verringert ist, aber im Fall des Wörterbuchs zu diesem Zeitpunkt wird sie der Rangvariablen zugewiesen. Da dies der Schlüsselteil ist, ist das Ausgabeergebnis wie oben beschrieben. Im Fall von * 2 werden durch Angabe von zwei Variablen nach for Rang → Schlüssel und Feind → Wert gleichzeitig zugewiesen und wiederholt. Vergessen Sie nicht, "items ()" zu verwenden, wenn Sie einer Variablen einen Wert zuweisen möchten. Um hier Verwirrung zu vermeiden, wird "items ()" verwendet, um den Schlüssel und den Wert eines Elements gleichzeitig in einem Wörterbuch oder nur den Wert abzurufen. "Enumerate ()" ist jedoch nur ein Element wie eine Liste und ein Index ( Gleichzeitig wird die Reihenfolge erfasst, in der die Liste gespeichert ist.

Sortieren

python



#aufführen

apples = [1,100,1000,10000]
print(sorted(apples))

##Ausgabeergebnis

[1, 100, 1000, 10000]


example = ['1.apple','4.apple','3.lemon','2.apple']
print(sorted(example))

##Ausgabeergebnis

['1.apple','2.apple','3.lemon','4.apple']

## reverse=Wenn True angegeben ist, wird es in umgekehrter Reihenfolge sortiert.

print(sorted(example, reverse=True))

##Ausgabeergebnis

['4.apple', '3.lemon', '2.apple', '1.apple']

#Wörterbuch

japan = {"kanagawa" : 10, "osaka" : 20, "okinawa":30}
print(sorted(japan))

##Ausgabeergebnis
['kanagawa', 'okinawa', 'osaka']

##Geben Sie den Wert zusammen aus

Wenn Sie den Wert zusammen ausgeben möchten
print(sorted(japan.items()))

##Ausgabeergebnis
[('kanagawa', 10), ('okinawa', 30), ('osaka', 20)]

Bei numerischen Werten wird die Größe der numerischen Werte bei alphabetischen Zeichen in alphabetischer Reihenfolge und bei Katakana / Hiragana in der Reihenfolge AIUEO sortiert. Im Fall von Kanji ist die Reihenfolge jedoch der Zeichencode und nicht die Lesereihenfolge. Die Priorität ist Nummer> Zeichenfolge.

Liste erstellen

python



#Versuchen Sie, die Liste mit for neu zu generieren.

team = ['Mutig','Krieger','Magier',]
newteam= []
for person in team:
    newteam.append('10 Jahre später' + person)

print(newteam)

##Ausgabeergebnis
['Held 10 Jahre später', 'Krieger 10 Jahre später', 'Zauberer 10 Jahre später']


#Erweiterte Version

numbers = [i*2 for i in range(10)]

print(numbers)

##Ausgabeergebnis
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

##Wenden wir es weiter an

numbers2 = [[1 for i in range(3)] for j in range(4)]
print(numbers2)

##Ausgabeergebnis
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]

Um einfach eine Liste zu erstellen, speichern Sie das Element in [] und weisen Sie es einer Variablen zu. Wie oben erwähnt, kann die Liste neu generiert werden, indem eine andere Liste in einer leeren Liste einer anderen Variablen mit der for-Anweisung gespeichert wird. Für den angewendeten Teil eine Methode zum Erweitern der for-Anweisung mit [] in der Phase des Zuweisens zu einer Variablen und zum Erstellen einer Liste durch Generieren der Elemente der Liste dort. Als Mechanismus ist es "[Element für i in range ()]", das Sie wiederholt speichern möchten. Mit anderen Worten, das zuvor für for angegebene Element wird wiederholt um den Betrag des Bereichs in der Liste gespeichert. In diesem Fall wird also Bereich (10) = 0 bis 9 i zugewiesen, und der verdoppelte Wert wird zugewiesen. Da es wiederholt als Element in der Liste gespeichert wird, ist das Ausgabeergebnis wie oben gezeigt. Und wenn Sie es weiter anwenden, können Sie eine zweidimensionale Liste erstellen. Der Mechanismus ist "[[Element für i in Bereich () für j in Bereich ()]], und der Teil von" für j in Bereich () "erstellt die zuvor angegebene Liste für. Es bedeutet das. Dies kann nützlich sein, wenn Sie eine einfache Liste von Zahlen erstellen möchten.

zum Verschachteln

Auch in Python können for-Anweisungen verschachtelt werden.

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:  #Wiederholen Sie den folgenden Vorgang
    for line in i: #Wiederholen Sie den folgenden Vorgang
        for dot in line: #Verarbeitung zum Punktwechsel
                if dot == 1:
                    print('@',end='')
                else:
                    print(' ',end='')
        print()
    print() #Brechen Sie jeden zweistelligen Index der Liste.

In diesem Beispiel wird ein Punktbild erstellt, indem 0 oder 1 mithilfe einer kubischen Liste in das entsprechende Symbol konvertiert wird. Zuerst. Führt den Prozess der Konvertierung von 0 oder 1 in Punkte (entsprechende Symbole oder Leerzeichen halber Breite) durch. Und das mit jeder Primärliste in der Liste. Da die primäre Liste in jeder sekundären Liste gespeichert ist, besteht der Prozess außerdem darin, nach dem Ausführen jeder sekundären Liste eine neue Zeile zu beginnen.

Argument variabler Länge

Ein Argument variabler Länge ist ein Argument, wenn * dem Argument hinzugefügt wird, wenn die Anzahl der Argumente unbekannt ist, oder ** hinzugefügt wird, wenn die Eigenschaft als Argument verwendet werden soll. Zum Beispiel in den folgenden Fällen

python



def introduce(**people):
    for name, greeting in people.items():
        print("ich" + name + "ist." + greeting)


introduce(hero = "Freut mich, dich kennenzulernen", villager = "Hallo", soldier = "Vielen Dank")

##Ausgabeergebnis



Angenommen, Sie möchten in der obigen Funktion die Art der Begrüßung abhängig von der Position mit dem Argument ändern, das von Personen ausgeführt wurde. Verwenden Sie dann ein Argument variabler Länge, da es zweckmäßig ist, das Argument auf unbestimmte Zeit festzulegen. In diesem Fall möchten wir die Eigenschaft als Argument verwenden, setzen Sie sie also auf "** people". Dann "people = [hero:" Schön, Sie kennenzulernen ", Dorfbewohner:" Hallo ", Soldat:" Danke ", weil es möglich ist, das Argument als solches festzulegen, das Argument, wenn die Funktion danach aufgerufen wird Es bedeutet, dass Sie es so machen sollten.

Python-Funktionen / Klassen

python



#Funktion

def say_hello():
    print('hello' )

say_hello()

##Ausgabeergebnis
hello

#Klasse

class Greeting:
    def __init__(self, name):#Schreiben eines Konstruktors in Python
        self.name = name

    def say_hello(self):
        print('hello' + self.name)

##Eine Klasse anrufen
test = Greeting('world')
test.say_hello()

##Ergebnis

hello world

Der Verarbeitungsinhalt der Funktion ist definiert als "def function name ():" und der Inhalt wird von dort aus verringert. Es ist einfach, nicht {} zu schreiben. Definieren Sie im Fall einer Klasse zusätzlich die Funktion als Methode mit dem Namen der Klassenklasse. Die aufrufende Methode ist dieselbe wie PHP, und Sie können sie einer Variablen zuweisen und zu einem Objekt machen. Außerdem ist "self" etwas, das seine eigene Instanz in der Klasse ausdrückt, wie "$ this" und "self ::" in PHP. Mit anderen Worten, self.name greift auf die Eigenschaft (Wert des Namens) der Klasse zu. Wenn beispielsweise der Standardwert im Argument festgelegt wird, wie unten im Konstruktorteil gezeigt, wird das Argument nicht in der Klasse im Aufruf festgelegt.

python



def __init__(self, name='unknown'):

##Ausgabeergebnis

hello unknown

Es stellt sich heraus, dass. Wenn ich die Klasse tatsächlich benutze

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) #Da im Konstruktor zwei Argumente festgelegt sind, geben Sie das Äquivalent an.
total = apple.total() #Methodenaufruf
print(total)

##Ausgabeergebnis
1944

Es wird so sein.

Privat in Python

Abschließend wird im Dokument Folgendes erläutert.

In Python gibt es keine "privaten" Instanzvariablen, auf die nur innerhalb eines Objekts zugegriffen werden kann.

Es kann jedoch als Pseudo behandelt werden, indem der Variablen oder Methode "__" vorangestellt wird. Schauen wir uns das folgende Beispiel an.

python



class Player:
    def __init__(self, job, weapon):
        self.job = job
        self.__weapon = weapon
    
    def walk(self):
        print(self.job + 'Ist Abenteuer in der Wildnis')
    
    def __attack(self, enemy):
         print(self.__weapon + "damit" + enemy + "Angreifen")

player1 = Player('Fighter','Sword')
player1.walk()
player1.attack('Golem') # error
print(player1.__weapon) # error


#Greifen Sie von außen auf private Methoden zu.

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() #Auf diese Weise wird die private Methode von außerhalb der Klasse aufgerufen.

Wenn Sie sich die im Konstruktor festgelegten Eigenschaften ansehen, können Sie zunächst feststellen, dass die Job-Eigenschaft öffentlich und die Waffeneigenschaft privat ist. Daher kann print (player1 .__ Waffe) nicht auf die Eigenschaft Waffe zugreifen, was zu einem Fehler führt. Die gleiche Begründung gilt für die Methode. Da es nicht vorzuziehen ist, von außen auf das Grundstück zuzugreifen, ist es grundsätzlich besser, es privat zu halten. Auf der anderen Seite ist es keine Geschichte, wenn Sie eine Methode wirklich verwenden möchten, sie aber nicht von außen aufrufen können. Machen Sie sie also nicht einfach privat. Wenn Sie wirklich von außen auf private Methoden zugreifen möchten Sie können mit der Beschreibung Variable, der das Objekt zugewiesen ist, darauf zugreifen._Klassenname__private Methodenname ().

Klassenvererbung in Python

python




class Box: #1
    def __init__(self, item):
        self.item = item

    def open(self):
        print("Ich öffnete die Schatzkiste."  + self.item + "Habe" +)


class ArmsBox(Box): #2
    def look(self):
        print("Meisterschwert steht leise ...")

box = Box("Heilkräuter")
box.open()

armsbox = ArmsBox('Pfeil und Bogen des Lichts') #3
armsbox.look()
armsbox.open()

##Ausgabeergebnis
Ich öffnete die Schatzkiste. Habe ein Heilkraut
Meisterschwert steht leise ...
Ich öffnete die Schatzkiste. Ich habe einen Pfeil und Bogen aus Licht


#Methodenüberschreibung

class Box: 
    def __init__(self, item):
        self.item = item

    def open(self):
        print("Ich öffnete die Schatzkiste."  + self.item + "Habe" )


class ArmsBox(Box): 
    def open(self):
        print("Generierte eine Waffe" +  "self.item" + "Habe")

##Fügen Sie beim Überschreiben ein Argument mit einem Standardwert hinzu

class ArmsBox(Box):
    def open(self, skill):
        print("Generierte eine Waffe." + self.item + "Habe" + self.item + "Waffenfertigkeiten" + '\"' + skill + '\"'  + "Es ist angehängt!")

armsbox = ArmsBox('Hagane Schwert')
armsbox.open('Tötlich')

##Ausgabeergebnis
Ich öffnete die Schatzkiste. Habe ein Heilkraut
Generierte eine Waffe. Ich habe ein Hagane-Schwert. Waffenfertigkeiten für das Schwert von Hagane"Tötlich"Es ist angehängt!


#Führen Sie die Methode der übergeordneten Klasse so aus, wie sie ist, anstatt sie zu referenzieren

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() #Elternklasse sagen_Rufen Sie die Hallo-Methode auf.
        print("YEAH YEAH YEAH")



player = Hello()
player.say_hello()

Definieren Sie zunächst die übergeordnete Klasse (Superklasse) wie in # 1. Dieses Mal werden wir die Konstruktorfunktion verwenden, um den Anfangswert und die Funktion, die ihn verwendet, zu definieren.

Erstellen Sie als Nächstes eine untergeordnete Klasse, die die übergeordnete Klasse in # 2 (Unterklasse) erbt. Definieren Sie dieses Mal eine Funktion, die mit der Druckfunktion eine beliebige Nachricht ausgibt. Nennen Sie es danach wie # 3 und verwenden Sie es. Wenn die Klasse geerbt wird, kann die untergeordnete Klasse auch auf die Methode der übergeordneten Klasse verweisen, sodass die Ausgabe wie oben ist. Im Gegensatz zu PHP ist die Methode zum Definieren der Klassenvererbung in Python so geschrieben, dass die übergeordnete Klasse im Argument der Klasse angegeben wird. class Name der übergeordneten Klasse (Name der untergeordneten Klasse):

Sie können Methoden auch normal überschreiben. Wichtig ist, dass Python-Überschreibungen nicht dieselben Argument- und Rückgabetypen haben müssen. Daher gibt es im obigen Beispiel kein Problem, selbst wenn die Box-Klasse an ArmsBox vererbt wird und ein Argument hinzugefügt wird, wenn die open-Methode überschrieben wird.

Wenn Sie die Methode der übergeordneten Klasse direkt verwenden möchten, anstatt sie zu erben, verwenden Sie "super ()". Der Methodenname der übergeordneten Klasse, die Sie verwenden möchten () ".

Klassenvariablen in Python

python



class Player:
    __charactor_count = 0

Klassenvariablen sind allgemeine Variablen in der Klasse. Daher ist es ein Problem, wenn von außen auf sie zugegriffen und unnötig geändert wird. Daher ist es besser, sie privat zu halten.

Klassenmethoden in Python

Natürlich gibt es Klassenvariablen, also gibt es natürlich Klassenmethoden, aber es unterscheidet sich ein wenig von PHP. In PHP wurde statisch vor der Methode angegeben, und der Aufruf erfolgte mit dem Namen self :: method usw. Für Python

python



class Player:
    __charactor_count = 0
    
    @classmethod #Dekorateur
    def summary(cls):
        print(str(Player.__charactor_count) + "Schleim mit einer Person angegriffen")

Zunächst wird eine als Dekorateur bezeichnete Technik verwendet. Der Dekorator ist ein Mechanismus, mit dem Sie den bereits definierten Funktionen neue Funktionen hinzufügen können. Einige sind vorhanden, und Sie können Ihre eigenen erstellen. Dieses Mal wird "@ classmethod" vorbereitet. Wenn dies verwendet wird, lautet das Argument der Methode "cls (= Klasse selbst)" anstelle von "self (= Instanz selbst)". Übrigens gibt es dazu auch eine "@static" -Methode. Verwenden Sie "@ classmethod", um auf Klassenvariablen zuzugreifen oder das Verhalten in geerbten Klassen zu ändern. @ staticmethod wird verwendet, wenn sich die Operation auch am Vererbungsziel nicht ändert. In diesem Fall verwenden wir @classmethod, da wir auf die Klassenvariablen zugreifen müssen. Die Zeit, zu der sich das Verhalten ändern sollte, ist übrigens wie folgt.

Zitat Klassenmethode und statische Methode in Python verwenden

python



class Student:
    def __init__(self, name, school):
        self.name = name
        self.school = school
        self.marks = []

    def average(self):
        """Durchschnittsnote zurückgeben

Ich möchte auf die Instanzvariable zugreifen, daher verwende ich die Instanzmethode.
        """
        return sum(self.marks) / len(self.marks)

    @classmethod
    def friend(cls, origin, friend_name, *args):
        """Füge Freunde aus derselben Schule hinzu.

Das Verhalten sollte sich in der geerbten Klasse ändern(Vererbungsklasse hat Gehaltseigenschaft)
Verwenden Sie also die Klassenmethode.
Das Initialisierungsargument der untergeordneten Klasse lautet*Gut bei args zu erhalten
        """
        return cls(friend_name, origin.school, *args)

    @staticmethod
    def say_hello():
        """Sag Hallo zum Lehrer

Verwenden Sie eine statische Methode, da dasselbe Verhalten auch bei Vererbung verwendet werden kann
        """
        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)

In der Elternklasse haben nur Name und Schule Eigenschaften, aber in der geerbten Kinderklasse wird die Gehaltseigenschaft neu hinzugefügt, sodass sich das Verhalten ändert. Übrigens bedeutet * args, ein beliebiges Argument variabler Länge als Taple (Konstantenliste) zu erhalten. Und wenn ein Argument vor diesem * Argument gesetzt wird, werden andere Eigenschaften als dieses Argument in einem Tap gruppiert. Mit anderen Worten, in diesem Fall werden hiro und "Mitsu", die origin und friend_name entsprechen, als Argumente verwendet, aber name und scholl unter den Initialisierungsargumenten der untergeordneten Klasse sind hiro = Working Student ("Hiro", "Stanford", 20.00). ), Das in mitsu = WorkingStudent.friend als Argument verwendet wird, sodass es nicht in einem Tupel zusammengefasst werden kann, Weil self.salary = Gehalt als Argument von def friend () schwebt. Sie erhalten es in * args. Wenn Sie genau hinschauen, können Sie feststellen, dass es kein Problem gibt, selbst wenn Sie die Konstruktormethode der übergeordneten Klasse überschreiben und ein Argument hinzufügen.

Leises Sprechen, dh die folgende Verarbeitung ist möglich.

python



class Player:
    __charactor_count = 0

    @classmethod
    def summary(cls):
        print(str(Player.__charactor_count) + "Eine Person griff Schleim an.")

    def __init__(self, name):
        self.name = name
        Player.__charactor_count += 1
        print(str(Player.__charactor_count) + "Zweiter Spieler," + self.name + "Ist aufgetaucht.")

    def attack(self, enemy):
        print(self.name + "Ist" + enemy + "Angegriffen!")

class Wizard(Player):
    def __init__(self):
        super().__init__("Magier")

    def attack(self, enemy):
        self.__spell()
        print(self.name + "Ist" + enemy + "Eine Flamme abgefeuert!")

    def __spell(self):
        print("Zuban!")

print("===Kämpfe auf einer Party gegen Schleim===")
hero = Player("Mutig")
warrior = Player("Krieger")
wizard = Wizard()

party = [hero, warrior, wizard]
for member in party:
    member.attack("Schleim")

Player.summary()

##Ausgabeergebnis
===Kämpfe auf einer Party gegen Schleim===
Der erste Spieler, der Tapfere, ist angekommen.
Der zweite Spieler, der Krieger, ist angekommen.
Ein dritter Spieler, der Zauberer, ist eingetroffen.
Der Tapfere griff den Schleim an!
Der Krieger hat den Schleim angegriffen!
Zuban!
Die Hexe zündete Schleim an!
Drei Leute griffen Schleim an.

Ausnahmebehandlung in Python

python



try:

außer Ausnahme Name als e:

finally:

Der vom try-Block ausgeführte Prozess, der Prozess, bei dem der Exception-Block dem Exception-Namen (Exception Catching Part) entspricht, und der finally-Block sind die Prozesse, die ausgeführt werden, auch wenn die Exception ignoriert wird. Mit anderen Worten

python



try:
    number = 0
    print('Dies ist 0')
    print(number / 2)

except ZeroDivisionError as e:
    print(e)

finally:
   print('Versuchen Sie festzustellen, ob es Ausnahmen gibt')

Bei der Syntax wird der Zahlenvariablen im try-Block zunächst 0 zugewiesen. Danach wird beim ersten Druck eine Nachricht ausgegeben, es tritt jedoch eine Ausnahme auf, da der zweite Druck durch 0 geteilt wird. Daher wird die Ausnahme in den Ausnahmeblock geworfen, abgefangen, und die Fehlermeldung wird der Variablen e und der Ausgabe zugewiesen. Schließlich wird die endgültige Blockverarbeitung ausgeführt. Natürlich bedeutet die Variable e im Ausnahmeblock, dass die Fehlermeldung als Argument verwendet wird.

print ('Eine Division von Null ist aufgetreten, die Verarbeitung wird abgebrochen')

Es kann durch jede Nachricht wie ersetzt werden. Übrigens, wenn Sie die Module "traceback" und "sys" importieren, können Sie "sys.stderr.write ()" anstelle von "print" schreiben. Auf diese Weise können Sie eine Fehlermeldung in der Standardfehlerausgabe definieren und die Fehlermeldung auf der Fehlerprotokollseite durch eine beliebige ersetzen. Im Gegenteil, wenn Sie die Nachricht auf der Seite des Fehlerprotokolls an die Person ausgeben möchten, die auf die gleiche Weise wie mit "print" auf dem Bildschirm ausgibt, verwenden Sie "print (traceback.format_exc ())". Es ist auch möglich, mehrere Ausnahmeblöcke zu definieren, um mehrere Ausnahmen abzufangen. Mit anderen Worten

python


except Exception as e:

except ZeroDivisionError as e:

except NameError as e:


Wenn es als definiert ist, wird die Ausnahmeprüfung in der Reihenfolge von oben durchgeführt. Da die Klasse "Exception" jedoch der übergeordneten Klasse für die folgenden zwei Klassen entspricht, muss sie bei der Definition zu Beginn beschrieben und die Ausnahmeklasse der untergeordneten Klasse in der unteren Ebene definiert werden. In diesem Fall wird eine andere Ausnahme als "ZeroDivisionError" und "NameError" von der "Exception" -Klasse "abgefangen", und die Ausnahmen in Bezug auf die Division von Null und die Angabe undefinierter Variablen sind hier die Klasse. Es wird ein Prozess des "Werfens" sein.

Beispiel für den Namen der Ausnahmeklasse

python



ZeroDivisionError
#Ausnahme bei der Division von 0

NameError
#Ausnahmen, die beim Aufruf einer undefinierten Variablen durchlaufen werden

Sie können Ihre eigenen erstellen, aber es gibt natürlich viele, die standardmäßig bereitgestellt werden. Wenn Sie also eine Ausnahme auslösen, sollten Sie diese überprüfen und entsprechend implementieren.

Lösen Sie absichtlich eine Ausnahme in einem Try-Block aus.

Ausnahmeklassenname () auslösen

Damit ist es möglich, eine Ausnahme einer beliebigen Ausnahmeklasse auszulösen und dann mit der entsprechenden Ausnahmeklasse abzufangen. Sie können auch eine Nachricht als Argument angeben.

Recommended Posts

Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Nach Abschluss von "Einführung in Python 3" des Paiza-Lernens ~
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Build Docker / Django / Nginx / MariaDB-Umgebung ~
Lernverlauf für die Teilnahme an der Entwicklung von Team-Apps in Python ~ Indexseite ~
Lernverlauf für die Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Ergänzung der Grundelemente und Aufbau der jupyterLab-Umgebung ~
Lernverlauf für die Teilnahme an der Entwicklung von Team-Apps in Python ~ Denken Sie ein wenig über die Definition von Anforderungen nach ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 5 ~
Lernverlauf für die Teilnahme an der Entwicklung von Team-Apps mit Python ~ Django Tutorial 4 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 1, 2, 3 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 6 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 7 ~
[Einführung in die Udemy Python3 + -Anwendung] 26. Kopie des Wörterbuchs
[Einführung in die Udemy Python3 + -Anwendung] 19. Kopie der Liste
[Einführung in Udemy Python3 + Application] 53. Wörterbuch der Schlüsselwortargumente
[Einführung in Udemy Python3 + Application] 52. Tapple von Positionsargumenten
Python3-Verarbeitung, die in Paiza verwendbar zu sein scheint
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
[Einführung in die Udemy Python3 + -Anwendung] 31. Kommentar
Python: Anwendung des überwachten Lernens (Rückkehr)
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
[Einführung in die Udemy Python3 + -Anwendung] 57. Decorator
Einführung in die Python-Grundlagen des maschinellen Lernens (unbeaufsichtigtes Lernen / Hauptanalyse)
[Einführung in die Udemy Python3 + -Anwendung] 56. Abschluss
[Einführung in die Udemy Python3 + -Anwendung] 59. Generator
[Einführung in die Udemy Python3 + -Anwendung] 69. Import des absoluten Pfads und des relativen Pfads
[Einführung in die Udemy Python3 + -Anwendung] 12. Indizieren und Schneiden von Zeichenketten
[Einführung in die Udemy Python3 + -Anwendung] Zusammenfassung
Lassen Sie uns die kostenlose "Einführung in Python für maschinelles Lernen" bis zum 27. April online stellen
Implementierung des Partikelfilters durch Python und Anwendung auf das Zustandsraummodell
[Einführung in Python] Eine ausführliche Erklärung der in Python verwendeten Zeichenkettentypen!
Möglichkeit der Anwendung auf die Evakuierungsroutengestaltung des Labyrinthproblems beim Lernen der Verstärkung
[Einführung in die Udemy Python3 + -Anwendung] 63. Notation zur Einbeziehung des Generators
[Einführung in die Udemy Python3 + -Anwendung] 28. Kollektiver Typ
[Einführung in Python] Wie verwende ich eine Klasse in Python?
[Einführung in die Udemy Python3 + -Anwendung] 25. Wörterbuchmethode
[Einführung in die Udemy Python3 + -Anwendung] 33. if-Anweisung
Allgemeine Relativitätstheorie in Python: Einführung
[Einführung in die Udemy Python3 + -Anwendung] 13. Zeichenmethode
[Einführung in die Udemy Python3 + -Anwendung] 55. In-Function-Funktionen
[Einführung in die Udemy Python3 + -Anwendung] 10. Numerischer Wert
[Einführung in die Udemy Python3 + -Anwendung] 21. Taple-Typ
[Einführung in die Udemy Python3 + -Anwendung] 45. Aufzählungsfunktion
[Einführung in die Udemy Python3 + -Anwendung] 41. Eingabefunktion
[Einführung in die Udemy Python3 + -Anwendung] 17. Listenoperation
[Einführung in die Udemy Python3 + -Anwendung] 65. Ausnahmebehandlung
[Einführung in die Udemy Python3 + -Anwendung] 11. Zeichenkette
[Einführung in die Udemy Python3 + -Anwendung] 44. Bereichsfunktion
[Einführung in die Udemy Python3 + -Anwendung] 46. Zip-Funktion
[Einführung in die Udemy Python3 + -Anwendung] 24. Wörterbuchtyp
Eine Einführung in Python für maschinelles Lernen
[Einführung in die Udemy Python3 + -Anwendung] 8. Variablendeklaration
[Einführung in die Udemy Python3 + -Anwendung] 29. Methode festlegen
[Einführung in die Udemy Python3 + -Anwendung] 16. Listentyp
[Einführung in die Udemy Python3 + -Anwendung] 61. Wörterbucheinschlussnotation
Einführung in Vektoren: Lineare Algebra in Python <1>
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
[Einführung in Data Scientist] Grundlagen von Python ♬
[Einführung in die Udemy Python3 + -Anwendung] 22. Auspacken der Taples
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
[Einführung in die Udemy Python3 + -Anwendung] 23. Verwendung von Tapuru