Rask Tips Hva er en Metaklass i Python?

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.

Er en klasse et objekt i python?!

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.

metaklasser

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.

Bruk Metaklass til å lage en klasse

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

Den __metaclass__ Attributt

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)

Oppretting og initiering av en metaklasse

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.