Informationen zu Python-Objekten und -Klassen

Umgang mit Klassen beim Erstellen eines eigenen MTV-Modells Ich werde es als Memo hinterlassen, weil ich es gelernt habe.

Der Inhalt ist ein rudimentärer Inhalt während des Elementarprozesses. Ich werde von Zeit zu Zeit aktualisieren, was ich gelernt habe.

Klassendefinition

sample.py


class Person(object):
    def eat(self):
        print('eat')

person = Person()
person.eat()

Ausgabeergebnis


eat

Das Argumentobjekt muss nicht sein, aber es ist besser, es als Rest des Python2-Systems (als Codestil) zu beschreiben. Klassen können mit person = Person () aufgerufen werden.

Konstruktor und Destruktor

sample.py


class Person(object):
    """Konstrukteur"""
    def __init__(self, food):
        self.food = food
        print('Food is ready')

    def eat(self):
        print('eat {}'.format(self.food))

    """Zerstörer"""
    def __del__(self):
        print('Thanks for the food')

person = Person('apple')
person.eat()
del person #Kann auch explizit geschrieben werden

Ausgabeergebnis


Food is ready
eat apple
Thanks for the food

Der Konstruktor ist das erste, was beim Erstellen eines Objekts aufgerufen wird. Destruktoren hingegen werden aufgerufen, wenn ein Objekt leer ist. Da die Methode __init__ des Konstruktors ganz am Anfang aufgerufen wird, wird sie bei der Beschreibung der Anfangseinstellungen verwendet. Es gibt andere Methoden wie die Methode "new". self.food kann auch mit anderen Methoden aufgerufen werden.

Klassenvererbung

sample.py


class Animal(object):
    def eat(self):
        print('eat')

class Monkey(Animal):
    def eat(self, food):
        self.food = food
        print('eat {}'.format(self.food))

class Cheetah(Animal):
    def run(self):
        print('run')

animal = Animal()
animal.eat()
print('###########')
monkey = Monkey()
monkey.eat('banana') #Methodenüberschreibung
print('###########')
cheetah = Cheetah()
cheetah.eat() #Klassenvererbung
cheetah.run() #Funktionserweiterung

Ausgabeergebnis


eat
###########
eat banana
###########
eat
run

Wenn Sie die übergeordnete Klasse an das Argument der untergeordneten Klasse übergeben, können Sie die Funktionen der übergeordneten Klasse verwenden. Es kann verwendet werden, wenn Sie die Funktion der übergeordneten Klasse nur in einem bestimmten Fall erweitern möchten. Sie können die Funktion auch mit einer untergeordneten Klasse überschreiben.

Übergeordneter Methodenaufruf von super

sample.py


class Animal(object):
    def __init__(self, food=None):
        self.food = food

    def eat(self):
        print('eat')

class Monkey(Animal):
    def __init__(self, food):
        super().__init__(food)

    def eat(self):
        print('eat {}'.format(self.food))


animal = Animal()
animal.eat()
print('###########')
monkey = Monkey('banana')
monkey.eat()

Ausgabeergebnis


eat
###########
eat banana

Nach der init wird die Funktion der übergeordneten Klasse von super () aufgerufen Die Funktion init der untergeordneten Klasse wird ausgeführt.

Eigentum (Getter / Setter)

sample.py


class Animal(object):
    def __init__(self, food=None, password=None):
        self._food = food
        self.password = password

    """getter"""
    @property
    def food(self):
        return self._food

    """setter"""
    @food.setter
    def food(self, food):
        if self.password == 'pass':
            self._food = food
        else:
            # raise ValueError
            print("Error") #Zur Bestätigung

animal = Animal('banana', password='pass')
print(animal.food)
animal.food = "orange"
print(animal.food)
print("##############")
animal2 = Animal('banana')
print(animal2.food)
animal2.food = "orange"
print(animal2.food)

Ausgabeergebnis


banana
orange
##############
banana
Error

Mithilfe von Eigenschaften können Sie Variablen lesen, die nicht von außen überschrieben werden sollen. Es wird gesagt, dass es explizit ausgedrückt werden kann, wenn Sie nicht möchten, dass der Wert neu geschrieben wird. Es ist möglich, eine Situation zu verhindern, in der ein Dritter eine vom Designer nicht beabsichtigte Operation ausführt und ein Fehler auftritt. Durch Hinzufügen eines Unterstrichs "_variable name" Es wird gesagt, dass es sinnvoll ist, es von außen zu verstecken. Da es fast keine Auswirkung auf den tatsächlichen Betrieb hat, ist es möglich, direkt auf die Variable zu verweisen.

Der Getter fügt "@ property" hinzu und macht den Funktionsnamen zum Namen der Zielvariablen.

Der Setter kann mit .setter auf den Funktionsnamen gesetzt werden, für den die Eigenschaft gesetzt ist. Es wird gesagt, dass es verwendet wird, wenn es akzeptabel ist, nur unter bestimmten Bedingungen zu überschreiben.

__ Variablenname Es gibt auch eine Methode zum Hinzufügen von zwei Unterstrichen, jedoch in der übergeordneten Klasse und der untergeordneten Klasse Wenn der Methodenname dupliziert wird, wird er im Allgemeinen verwendet, um Konflikte zu vermeiden. Bitte überprüfen Sie hier für Details.

Klassenvariable

sample.py


class Person(object):
    eated_list = [] #Klassenvariable

    def eat(self, food):
        print('eat {}'.format(food))
        self.eated_list.append(food)

personA = Person()
personA.eat("apple")
print(personA.eated_list)

personB = Person()
personB.eat("orange")
print(personB.eated_list)

Ausgabeergebnis


eat apple
['apple']
eat orange
['apple', 'orange']

Eine Klassenvariable ist eine Variable, die von allen generierten Objekten gemeinsam genutzt werden kann. Daher besteht das Risiko, dass Informationen, die Sie nicht zwischen Objekten teilen möchten, wie im obigen Code geteilt werden. Um dies zu vermeiden, bringen Sie die Variable in die Methode init und Jedes Mal, wenn ein Objekt erstellt wird, muss der Initialisierungsprozess der Variablen beschrieben werden.

Recommended Posts

Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
[Python] Über Executor und zukünftige Klassen
Apropos alte und neue Klassen in Python
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Über Python und reguläre Ausdrücke
Informationen zu Python- und Betriebssystemoperationen
Python # Über Referenz und Kopie
Über Python sort () und reverse ()
Über _ und __
Informationen zur Installation der Serien Pwntools und Python2
Perl-Objekt und Python-Klasse Teil 2.
ABC für Python-Abstract-Klassen und Ententypisierung
Python: Ein Hinweis zu Klasse 1 "Abstract"
Über Python-Diktat und sortierte Funktionen
Über Python und Cython dtype
Zuweisungen und Änderungen in Python-Objekten
Was war überraschend an Python-Klassen?
Über Python Pickle (cPickle) und Marschall
Über Python, aus und importieren, als
Perl-Objekt und Python-Klasse Teil 1.
Python-Klassen und -Instanzen, Instanzmethoden
Über Python-Slices
Über die Einschlussnotation von Python
Über Python tqdm.
Über die Python-Ausbeute
Binden Sie Methoden an Python-Klassen und -Instanzen
Über Python, Klasse
Informationen zur Python-Vererbung
Über Python, range ()
Über Python Decorator
Eine Geschichte über Python Pop und Append
Informationen zur Python-Referenz
Über Python-Dekorateure
[Python] Über Multi-Prozess
Apropos Python-Klassenattribute und Metaklassen
Wie Python-Klassen und magische Methoden funktionieren.
Organisieren Sie die Bedeutung von Methoden, Klassen und Objekten
Denken Sie an Suchvorgänge mit Tiefenpriorität und Breitenpriorität in Python
Über den Unterschied zwischen "==" und "is" in Python
[Hikari-Python] Kapitel 09-02 Klassen (Erstellen und Instanziieren von Klassen)
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
[Python] Erfahren Sie mehr über asynchrone Programmierung und Ereignisschleifen
[Hikari-Python] Kapitel 09-01 Klassen (Grundlagen von Objekten)
Über flache und tiefe Kopien von Python / Ruby
[Python] Komprimieren und dekomprimieren
Über Klasse und Instanz
Über Funktionsargumente (Python)
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
[Python] Memo über Funktionen
Python-Klassen sind langsam
Ruby, Python und Map
Zusammenfassung über Python3 + OpenCV3
Über Cumprod und Cummax