Denne raske tipsen gir en kort oversikt over hva vi mener med en metaklasse i Python og viser noen eksempler på konseptet.
Før du drar inn i denne artikkelen, bør jeg påpeke et viktig poeng om klasser i Python som gjør det lettere for oss å forstå begrepet metaklasser.
Hvis du har brukt et annet programmeringsspråk enn Python, er konseptet du forstod om klasser mest sannsynlig at det er en måte å lage nye objekter på. Dette er også sant i Python, men Python tar det enda et skritt videre. Klasser blir også betraktet som objekter!
Så, hvis du opprettet følgende klasse i Python:
klasse myClass (objekt): pass
Dette betyr ganske enkelt at en gjenstand med navnet klassen min
har blitt opprettet i minnet. Siden dette objektet er i stand til å opprette nye objekter, betraktes det som a klasse. Dette betyr at vi kan bruke objektoperasjoner på klasser i Python, da klasser er objekter selv.
Vi kan dermed gjøre operasjoner på klasser som å tildele klassen til en variabel, som følger:
class_object = myClass () print class_object
Hvilken retur:
<__main__.myClass object at 0x102623610>
Du kan til og med passere klassen klassen min
som en parameter til en metode, som følger:
def class_object (object): skrive objekt class_object (myClass)
Hvilket returnerer følgende utgang:
I tillegg til andre operasjoner kan du normalt søke på objekter.
Kanskje du har kommet over type
søkeord i python? Du har mest sannsynlig brukt det til å sjekke typen av noe objekt, som vist i følgende eksempler:
utskriftstype ('abder') utskriftstype (100) utskriftstype (100,0) utskriftstype (int)
I så fall vil du få følgende utgang:
Ser på utgangen, alt virker ganske klart til du kommer til typen type
. For å se hva dette kan bety, la oss gå tilbake til vår klasse vi definerte i begynnelsen av denne artikkelen:
klasse myClass (objekt): pass
Gjør nå følgende:
utskriftstype (myClass)
Hva er resultatet av denne uttalelsen? Det vil overraskende være:
Så kan vi konkludere med at type klasser i Python er type
!
Hva er forholdet mellom a type
og a metaclass
? Vel, a type
er en metaclass
, forutsatt at standard metaclass
er type
. Jeg vet at dette kan være forvirrende, spesielt det type
kan brukes til å returnere klassen av noe objekt som vist ovenfor, men dette skyldes kompatibiliteten bakover i Python. Så, hvis du skriver:
utskriftstype (type)
Du vil få:
Det betyr at a type
er en type
!
Begrepet metaclass
betyr bare noe pleide å lage klasser. Det er med andre ord klassen av en klasse, noe som betyr at forekomsten av en klasse i dette tilfellet er en klasse. Og dermed, type
regnes som a metaclass
siden forekomsten av a type
er en klasse.
For eksempel, da vi nevnte følgende erklæring ovenfor:
class_object = myClass ()
Dette bygger bare et objekt / forekomst av klassen klassen min
. Med andre ord brukte vi en klasse for å skape et objekt.
På samme måte, da vi gjorde følgende:
klasse myClass (objekt): pass
De metaclass
ble brukt til å lage klassen klassen min
(som regnes som a type
). Så, som objektet er en forekomst av en klasse, er en klasse en forekomst av a metaclass
.
I denne delen skal vi se hvordan vi kan bruke en metaclass
å lage en klasse, i stedet for å bruke klasse
uttalelse som vi så i klassene og objekter opplæringen. Som vi så over, er standard metaclass
er type
. Dermed kan vi bruke følgende setning for å lage en ny klasse:
new_class = type ('myClass', (), )
Hvis du vil gjøre ting enklere, kan du tildele samme klassenavn klassen min
til variabelnavnet.
Ordboken Her brukes det til å definere klassens attributter. Så, med følgende erklæring:
myClass = type ('myClass', (), 'a': True)
Den er lik:
klasse myClass (objekt): a = True
Si at vi opprettet klassen klassen min
som følger:
klasse myClass (objekt): __metaclass__ = myMetaClass pass
I dette tilfellet oppstår klassesett ved hjelp av myMetaClass
i stedet for type
, som følger:
myClass = myMetaClass (klassenavn, baser, ordbok)
Hvis du vil ha kontroll over hvordan du skape og initial en klasse etter opprettelsen, kan du bare bruke metaklassen __ny__
metode og __i det__
konstruktør, henholdsvis. Så når myMetaClass
over kalles, dette er hva som skjer bak kulissene:
myClass = myMetaClass .__ ny __ (myMetaClass, navn, baser, ordbok) myMetaClass .__ init __ (myClass, navn, baser, ordbok)
Jeg vil ikke gjøre dette raske tipset lenger, men for å oppsummere, kan vi konkludere med at a metaclass
brukes i Python for å lage en klasse. Det er tilfelle av a metaclass
er en klasse. Hvis du vil dykke dypere inn i metaklasser, kan du sjekke ut denne opplæringen.