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: 'Secretive' object has no attribute '__inacessible' >>> s.accessible() The secret message is: Bet you can'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'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=['SPAM'] >>> f=Filter() >>> f.init() >>> f.filter([1,2,3]) [1, 2, 3] >>> s=SPAMFilter() >>> s.init() >>> s.filter(['SPAM','SPAM','egg','name','ff']) ['egg', 'name', 'ff']
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=['s'] >>> 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!