Instans kontra statiska kontra klassmetoder i Python: De viktiga skillnaderna

Instans kontra statiska kontra klassmetoder i Python: De viktiga skillnaderna

Python -metoder kan ofta vara förvirrande när du väl kommer in på objektorienterad programmering (OOP). Denna guide täcker de tre huvudtyperna av metoder i Python.





De tre typerna av metoder i Python

Det finns tre typer av metoder i Python: instansmetoder , statiska metoder , och klassmetoder .





Att veta skillnaderna är inte alltid nödvändigt för att koda grundläggande Python -skript, men när du går vidare till OOP kan skillnaderna göra en stor förändring.





Om du är ny på Python eller bara vill experimentera utan att behöva installera något, se till att du besöker dessa online interaktiva Python -skal .

Innan vi börjar: Förstå dekoratörsmönster

Innan man tittar på skillnaderna är det viktigt att förstå ett designmönster som kallas dekoratörsmönster , eller helt enkelt kallas a dekoratör .



Dekoratörer låter komplexa, men det finns inget att frukta. Dekoratörer är helt enkelt funktioner. Du kan skriva dem själv eller använda dem som ingår i biblioteken eller Python standardbibliotek.

Precis som alla funktioner utför dekoratörer en uppgift. Skillnaden här är att dekoratörer tillämpar logik eller ändrar beteendet hos andra funktioner. De är ett utmärkt sätt att återanvända kod och kan hjälpa till att separera logik i individuella problem.





Dekoratormönstret är Pythons föredragna sätt att definiera statiska metoder eller klassmetoder. Så här ser en ut i Python:

class DecoratorExample:
''' Example Class '''
def __init__(self):
''' Example Setup '''
print('Hello, World!')
@staticmethod
def example_function():
''' This method is decorated! '''
print('I'm a decorated function!')

de = DecoratorExample()
de.example_function()

Dekoratörer måste omedelbart föregå en funktion eller klassdeklaration. De börjar med @ tecken, och till skillnad från vanliga metoder behöver du inte sätta parenteser på slutet om du inte skickar in argument.





Det är möjligt att kombinera flera dekoratörer, skriva din egen och tillämpa dem på klasser också, men du behöver inte göra något av det för dessa exempel.

iphone 12 pro max vs iphone 12

Instansmetoder i Python

Instansmetoder är den vanligaste typen av metoder i Python -klasser. Dessa kallas så eftersom de kan komma åt unika data från sin instans. Om du har två objekt var och en skapad från en bilklass, kan de ha olika egenskaper. De kan ha olika färger, motorstorlekar, säten och så vidare.

Instansmetoder måste ha själv som en parameter, men du behöver inte skicka detta varje gång. Jag är en annan speciell term för Python. Inuti vilken instansmetod som helst kan du använda dig själv för att komma åt data eller metoder som kan finnas i din klass. Du kommer inte att kunna komma åt dem utan att gå igenom dig själv.

Slutligen, eftersom instansmetoder är de vanligaste, behövs ingen dekoratör. Varje metod du skapar skapas automatiskt som en instansmetod, såvida du inte säger till Python något annat.

Här är ett exempel:

class DecoratorExample:
''' Example Class '''
def __init__(self):
''' Example Setup '''
print('Hello, World!')
self.name = 'Decorator_Example'
def example_function(self):
''' This method is an instance method! '''
print('I'm an instance method!')
print('My name is ' + self.name)

de = DecoratorExample()
de.example_function()

De namn variabel nås genom själv . Lägg märke till det när exempel_funktion kallas behöver du inte släppa in dig själv --- Python gör detta åt dig.

Statiska metoder i Python

Statiska metoder är metoder som är relaterade till en klass på något sätt, men som inte behöver komma åt någon klassspecifik data. Du behöver inte använda själv , och du behöver inte ens instansera en instans, du kan helt enkelt ringa din metod:

class DecoratorExample:
''' Example Class '''
def __init__(self):
''' Example Setup '''
print('Hello, World!')
@staticmethod
def example_function():
''' This method is a static method! '''
print('I'm a static method!')

de = DecoratorExample.example_function()

De @staticmethod dekoratör användes för att berätta för Python att denna metod är en statisk metod.

Statiska metoder är bra för verktygsfunktioner, som utför en uppgift isolerat. De behöver inte (och kan inte) komma åt klassdata. De ska vara helt fristående och bara fungera med data som skickas in som argument. Du kan använda en statisk metod för att lägga ihop två nummer eller skriva ut en given sträng.

Klassmetoder i Python

Klassmetoder är den tredje och sista OOP -metodtypen att känna till. Klassmetoder vet om sin klass. De kan inte komma åt specifika instansdata, men de kan anropa andra statiska metoder.

Klassmetoder behöver inte själv som ett argument, men de behöver en parameter som kallas cls . Detta står för klass , och som jag själv, skickas automatiskt in av Python.

Klassmetoder skapas med hjälp av @klassmetod dekoratör.

class DecoratorExample:
''' Example Class '''
def __init__(self):
''' Example Setup '''
print('Hello, World!')
@classmethod
def example_function(cls):
''' This method is a class method! '''
print('I'm a class method!')
cls.some_other_function()
@staticmethod
def some_other_function():
print('Hello!')

de = DecoratorExample()
de.example_function()

Klassmetoder är möjligen de mer förvirrande metodtyperna av de tre, men de har sin användning. Klassmetoder kan manipulera själva klassen, vilket är användbart när du arbetar med större och mer komplexa projekt.

När ska varje metodtyp användas

Det kan tyckas som ett tufft och skrämmande beslut att välja mellan olika typer av metoder i Python, men du kommer snart att få kläm på det med lite övning.

bästa gratis vpn -tillägget för krom 2018

Även om du bara skriver små manus för skojs skull är det en stor kunskap att lära sig en annan OOP -funktion i Python, och kan hjälpa till att göra din kod lättare att felsöka och lättare att återanvända i framtiden.

Sammanfattningsvis:

  1. Instansmetoder: Den vanligaste metoden. Kan komma åt data och egenskaper som är unika för varje instans.
  2. Statiska metoder: Kan inte komma åt något annat i klassen. Helt fristående kod.
  3. Klassmetoder: Kan komma åt begränsade metoder i klassen. Kan ändra klassspecifika detaljer.

Om denna handledning var lite avancerad, eller inte riktigt vad du letade efter, varför inte ta en titt på dessa kurser för att gå från Python -nybörjare till proffs? Dessa 5 webbplatser är också bra för Python -nybörjare. Om du vill ha en fysisk, verklig användning av Python, men är uttråkad av Raspberry Pi, vad sägs om vår guide till styr Arduino med Python ?

Dela med sig Dela med sig Tweet E-post Hur du rengör din Windows -dator med kommandotolken

Om din Windows -dator har slut på lagringsutrymme, rensa bort skräpet med dessa snabba kommandotolken.

Läs Nästa
Relaterade ämnen
  • Programmering
  • Programmering
  • Pytonorm
Om författaren Joe Coburn(136 artiklar publicerade)

Joe är utbildad i datavetenskap från University of Lincoln, Storbritannien. Han är en professionell mjukvaruutvecklare, och när han inte flyger drönare eller skriver musik kan han ofta hittas ta foton eller producera videor.

Mer från Joe Coburn

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera