Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Klassen und Typen in Python

Detaillierte Erläuterung der Klassen und Typen in Python

高洛峰
高洛峰Original
2017-03-07 16:41:521387Durchsuche

Was ist eine Klasse?

kann als Synonym für Kategorie oder Typ angesehen werden. Alle Objekte gehören zu einer bestimmten Klasse und werden Instanzen dieser Klasse genannt.

Zum Beispiel: Bird ist eine Instanz von „bird“. Dies ist nur eine allgemeine (abstrakte) Klasse mit vielen Unterklassen: Der Vogel, den Sie sehen, könnte zur Unterklasse „lark“ gehören. Stellen Sie sich „Vögel“ als die Sammlung aller Vögel vor, von denen „Lerchen“ eine Untergruppe sind. Wenn die Klasse, zu der ein Objekt gehört, eine Teilmenge der Klasse ist, zu der ein anderes Objekt gehört, wird die erstere als Unterklasse der letzteren bezeichnet, also sind „Lerchen“ Unterklassen von „Vögeln“ und „Vögel“ sind „Lerchen“ „Vogel“. " Superklasse

Das Definieren einer Unterklasse ist nur ein Prozess, bei dem weitere Methoden definiert werden

Eine Klasse erstellen

>>> class Person:
    def setName(self,name):
        self.name=name
    def getName(self):
        return self.name
    def greet(self):
        print "Hello,world! I'm %s" % self.name

        
>>> foo=Person()
>>> bar=Person()
>>> foo.setName('Nsds')
>>> bar.setName('Ysdy')
>>> foo.greet()
Hello,world! I'm Nsds
>>> bar.greet()
Hello,world! I'm Ysdy

Beim Aufrufen der setName- undgreet-Funktionen von foo übergibt sich foo automatisch als erster Parameter an die Funktion, sodass sie den Namen self trägt. Ohne self können Mitgliedsmethoden nicht auf das Objekt selbst zugreifen, auf dessen Eigenschaften sie zugreifen möchten

Auf Eigenschaften kann extern zugegriffen werden:

>>> foo.name
'Nsds'
>>> bar.name='Yoda'
>>> bar.greet()
Hello,world! I'm Yoda

Features, Funktionen, Methoden

Der self-Parameter ist eigentlich der Unterschied zwischen Methoden und Funktionen. Methoden binden ihren ersten Parameter an die entsprechende Instanz, sodass dieser Parameter nicht angegeben werden muss. Sie können die Eigenschaften also an eine normale Funktion binden, sodass es keine speziellen Selbstparameter gibt:

(Merkmale sind Variablen innerhalb des Objekts, der Zustand des Objekts wird durch seine Eigenschaften beschrieben und die Methoden des Objekts sind es Eigenschaften können geändert werden und auf Eigenschaften kann direkt von außerhalb des Objekts zugegriffen werden)

>>> class Class:
    def method(self):
        print 'I have a self!'

        
>>> def function():
    print "I don't..."

>>> s=Class()
>>> s.method()
I have a self!
>>> s.method=function
>>> s.method()
I don't...

Die Variable Birdsong bezieht sich auf die Bindungsmethode Bird.sing oder zum Selbstparameter Access (immer noch an dieselbe Instanz der Klasse gebunden)

>>> class Bird:
    song='Squaawk'
    def sing(self):
        print self.song

        
>>> bird=Bird()
>>> bird.sing()
Squaawk
>>> birdsong=bird.sing
>>> birdsong()
Squaawk

Fügen Sie einen doppelten Unterstrich vor den Namen ein, um die Methode oder das Attribut zu erstellen privat (von außen nicht zugänglich)

>>> class Secretive:
    def __inaccessible(self):
        print "Bet you can't see me..."
    def accessible(self):
        print "The secret message is:"
        self.__inaccessible()

        
>>> s=Secretive()
>>> s.__inacessible()

Traceback (most recent call last):
  File "<pyshell#182>", line 1, in <module>
    s.__inacessible()
AttributeError: &#39;Secretive&#39; object has no attribute &#39;__inacessible&#39;
>>> s.accessible()
The secret message is:
Bet you can&#39;t see me...

In der internen Definition einer Klasse werden alle Namen, die mit einem doppelten Unterstrich beginnen, als „übersetzt“. vorangestellt ist ein einzelner Unterstrich und die Form des Klassennamens

>>> Secretive._Secretive__inaccessible<unbound method Secretive.__inaccessible>
>>> s._Secretive__inaccessible()
Bet you can&#39;t see me...

Der Namespace der Klasse

Beim Definieren einer Klasse der gesamte Code befindet sich in der Klassenanweisung. Wird in einem speziellen Namespace ausgeführt – dem Namespace der Klasse. Auf diesen Namespace können alle Mitglieder der Klasse zugreifen. Die Definition der Klasse

ist eigentlich der Ausführungscodeblock

>>> class MemberCounter:
    members=0
    def init(self):
        MemberCounter.members+=1

        
>>> m1=MemberCounter()
>>> m1.init()
>>> m1.members
>>> m1.members=2
>>> m1.members
>>> m2=MemberCounter()
>>> m2.init()
>>> m2.members
>>> m2.init()
>>> m2.members
>>> m1.members
>>>

In den neuen Elementwert wird geschrieben die Eigenschaften von m1, Abschirmung von Variablen innerhalb des Klassenbereichs

Superklasse

>>> class Filter:
    def init(self):
        self.blocked=[]
    def filter(self,sequence):
        return [x for x in sequence if x not in self.blocked]

    
>>> class SPAMFilter(Filter):
    def init(self):
        self.blocked=[&#39;SPAM&#39;]

        
>>> f=Filter()
>>> f.init()
>>> f.filter([1,2,3])
[1, 2, 3]
>>> s=SPAMFilter()
>>> s.init()
>>> s.filter([&#39;SPAM&#39;,&#39;SPAM&#39;,&#39;egg&#39;,&#39;name&#39;,&#39;ff&#39;])
[&#39;egg&#39;, &#39;name&#39;, &#39;ff&#39;]

Vererbung, Superklasse

>>> class Filter:
    def init(self):
        self.blockes=[]
    def filter(self,sequence):
        return [x for x in sequence if x not in self.blocked]

    
>>> class S(Filter):
    def init(self):
        self.blocked=[&#39;s&#39;]

        
>>> f=Filter()
>>> f.init()
>>> f.filter([1,2,3])

Mehrere Superklassen

Methoden in der Klasse, die zuerst geerbt wird, überschreiben Methoden in der Klasse, die später geerbt wird

>>> class C():
    def calculate(self,expression):
        self.value=eval(expression)

        
>>> class Talker():
    def talk(self):
        print 'Hi,my value is',self.value

        
>>> class TalkingCalculator(C,Talker):
    pass

>>> tc=TalkingCalculator()
>>> tc.calculate('1+2*3')
>>> tc.talk()
Hi,my value is 7

Weitere Artikel zu detaillierten Erklärungen von Klassen und Typen in Python finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn