Python-luokat ja objektit (esimerkkien kanssa)

Tässä opetusohjelmassa opit Python-objektien ja luokkien ydintoiminnoista. Opit mikä luokka on, miten se luodaan ja miten sitä käytetään ohjelmassa.

Video: Python-luokat ja objektit

Python-objektit ja -luokat

Python on olio-ohjelmointikieli. Toisin kuin toimintoperusteinen ohjelmointi, jossa pääpaino on toiminnoissa, olio-ohjelmointi painottaa esineitä.

Kohde on yksinkertaisesti kokoelma tietoja (muuttujia) ja menetelmiä (toimintoja), jotka vaikuttavat näihin tietoihin. Vastaavasti luokka on kyseisen objektin suunnitelma.

Voimme ajatella luokkaa luonnoksena (prototyyppi) talosta. Se sisältää kaikki yksityiskohdat lattiasta, ovista, ikkunoista jne. Näiden kuvausten perusteella rakennamme talon. Talo on esine.

Koska monet talot voidaan tehdä talon suunnitelmasta, voimme luoda monia esineitä luokasta. Objektia kutsutaan myös luokan instanssiksi ja objektin luomisprosessia kutsutaan instantiationiksi .

Luokan määrittäminen Pythonissa

Kuten funktion määritelmät alkavat def-avainsanalla Pythonissa, luokan määritelmät alkavat luokan avainsanalla.

Luokan ensimmäistä merkkijonoa kutsutaan docstringiksi, ja siinä on lyhyt kuvaus luokasta. Vaikka tämä ei ole pakollista, se on erittäin suositeltavaa.

Tässä on yksinkertainen luokan määritelmä.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Luokka luo uuden paikallisen nimitilan, jossa kaikki sen määritteet on määritelty. Attribuutit voivat olla tietoja tai toimintoja.

Siinä on myös erityisiä määritteitä, jotka alkavat kaksoisviivoin __. Esimerkiksi __doc__antaa meille kyseisen luokan opetuksen.

Heti kun määritämme luokan, luodaan uusi luokkaobjekti samalla nimellä. Tämän luokan objektin avulla voimme käyttää erilaisia ​​määritteitä sekä instantisoida tämän luokan uusia objekteja.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Tuotos

 10 Tämä on henkilöluokka

Objektin luominen Pythonissa

Näimme, että luokkaobjektia voitiin käyttää erilaisiin määritteisiin.

Sitä voidaan käyttää myös luomaan uusia luokan ilmentymiä (instantiation). Objektin luominen on samanlainen kuin toimintokutsu.

 >>> harry = Person()

Tämä luo uuden objektin esiintymän nimeltä Harry. Voimme käyttää objektien määritteitä objektinimen etuliitteellä.

Attribuutit voivat olla tietoja tai menetelmiä. Kohteen menetelmät ovat kyseisen luokan vastaavia toimintoja.

Tämä tarkoittaa sitä, että koska Person.greetse on funktio-objekti (luokan attribuutti), Person.greettulee olemaan menetelmäobjekti.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Tuotos

  Hei 

Olet ehkä huomannut selfparametrin funktion määritelmässä luokan sisällä, mutta kutsuimme menetelmää yksinkertaisesti harry.greet()ilman mitään argumentteja. Se toimi edelleen.

Tämä johtuu siitä, että aina kun objekti kutsuu menetelmäänsä, objekti itse lähetetään ensimmäisenä argumenttina. Joten harry.greet()kääntää Person.greet(harry).

Yleensä menetelmän kutsuminen n argumenttiluettelolla vastaa vastaavan funktion kutsumista argumenttiluettelolla, joka on luotu lisäämällä menetelmän objekti ennen ensimmäistä argumenttia.

Näistä syistä luokan funktion ensimmäisen argumentin on oltava objekti itse. Tätä kutsutaan perinteisesti itseksi. Se voidaan nimetä toisin, mutta suosittelemme noudattamaan sopimusta.

Nyt sinun on tunnettava luokan objekti, ilmentymäobjekti, funktioobjekti, menetelmäobjekti ja niiden erot.

Rakentajat Pythonissa

Kaksoisviivalla alkavia luokan toimintoja __kutsutaan erikoistoiminnoiksi, koska niillä on erityinen merkitys.

Yksi erityinen mielenkiinto on __init__()toiminto. Tätä erikoistoimintoa kutsutaan aina, kun kyseisen luokan uusi objekti on ilmentynyt.

Tämän tyyppistä toimintoa kutsutaan myös olioorientoidussa ohjelmoinnissa (OOP) konstruktoreiksi. Käytämme sitä yleensä kaikkien muuttujien alustamiseen.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Tuotos

 2 + 3j (5, 0, 10) Seuranta (viimeisin puhelu viimeisin): Tiedosto "", rivi 27, tulostettuna (num1.attr) AttributeError: Objektilla 'ComplexNumber' ei ole attribuuttia 'attr'

Edellä olevassa esimerkissä määriteltiin uusi luokka edustamaan kompleksilukuja. Siinä on kaksi toimintoa, __init__()muuttujien alustaminen (oletusarvo on nolla) ja get_data()numeron näyttäminen oikein.

Mielenkiintoinen asia huomata edellisessä vaiheessa on, että kohteen attribuutteja voidaan luoda lennossa. Olemme luoneet uuden attribuutin attr objektille num2 ja lukeneet sen myös. Mutta tämä ei luo kyseistä määritettä objektille num1.

Attribuuttien ja objektien poistaminen

Objektin minkä tahansa määritteen voi poistaa milloin tahansa delkäskyn avulla. Kokeile seuraavaa Python-kuoressa nähdäksesi tulosteen.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Voimme jopa poistaa objektin itse del-käskyn avulla.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

Itse asiassa se on monimutkaisempi kuin se. Kun teemme c1 = ComplexNumber(1,3), uusi ilmentymäobjekti luodaan muistiin ja nimi c1 sitoutuu siihen.

Komennossa del c1tämä sidonta poistetaan ja nimi c1 poistetaan vastaavasta nimiavaruudesta. Kohde on kuitenkin edelleen olemassa muistissa, ja jos siihen ei ole sidottu muuta nimeä, se tuhoutuu myöhemmin automaattisesti.

Tätä viittaamattomien objektien automaattista tuhoamista Pythonissa kutsutaan myös roskakoriksi.

Objektien poistaminen Pythonissa poistaa nimen sidonnan

Mielenkiintoisia artikkeleita...