„Python“ klasės ir objektai (su pavyzdžiais)

Šioje pamokoje sužinosite apie pagrindinius „Python“ objektų ir klasių funkcionalumus. Sužinosite, kas yra klasė, kaip ją sukurti ir naudoti savo programoje.

Vaizdo įrašas: „Python“ klasės ir objektai

„Python“ objektai ir klasės

„Python“ yra į objektą orientuota programavimo kalba. Skirtingai nuo procedūrinio programavimo, kur pagrindinis dėmesys skiriamas funkcijoms, objektinis programavimas pabrėžia objektus.

Objektas yra tiesiog duomenų (kintamųjų) ir metodų (funkcijų), veikiančių tuos duomenis, rinkinys. Panašiai klasė yra to objekto projektas.

Klasę galime laikyti namo eskizu (prototipu). Jame pateikiama visa išsami informacija apie grindis, duris, langus ir pan. Remdamiesi šiais aprašais mes pastatome namą. Namas yra objektas.

Kadangi daugelį namų galima pagaminti iš namo projekto, mes galime sukurti daug objektų iš klasės. Objektas taip pat vadinamas klasės egzemplioriumi, o šio objekto kūrimo procesas vadinamas momentiniu .

Klasės apibrėžimas „Python“

Kaip ir funkcijų apibrėžimai prasideda „Def“ raktiniu žodžiu „Python“, klasės apibrėžimai prasideda klasės raktiniu žodžiu.

Pirmoji eilutė klasės viduje vadinama docstring ir turi trumpą klasės apibūdinimą. Nors tai nėra privaloma, tai labai rekomenduojama.

Čia yra paprastas klasės apibrėžimas.

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

Klasė sukuria naują vietinę vardų sritį, kurioje apibrėžti visi jos atributai. Atributai gali būti duomenys arba funkcijos.

Jame taip pat yra specialių atributų, kurie prasideda dvigubais pabraukimais __. Pavyzdžiui, __doc__pateikia mums tos klasės mokymą.

Kai tik apibrėžiame klasę, tuo pačiu pavadinimu sukuriamas naujas klasės objektas. Šis klasės objektas leidžia mums pasiekti skirtingus atributus, taip pat sukurti naujus tos klasės objektus.

 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__)

Rezultatas

 10 Tai yra asmens klasė

Objekto kūrimas „Python“

Matėme, kad klasės objektą galima naudoti norint pasiekti skirtingus atributus.

Jis taip pat gali būti naudojamas kuriant naujus tos klasės objektų egzempliorius (egzempliorius). Objekto kūrimo procedūra yra panaši į funkcijos iškvietimą.

 >>> harry = Person()

Tai sukurs naują objekto egzempliorių, pavadintą harry. Mes galime pasiekti objektų atributus naudodami objekto pavadinimo priešdėlį.

Atributai gali būti duomenys arba metodas. Objekto metodai yra atitinkamos tos klasės funkcijos.

Tai reiškia sakyti, kadangi Person.greetyra funkcijos objektas (klasės atributas), Person.greetbus metodo objektas.

 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() 

Rezultatas

  Sveiki 

Galbūt pastebėjote selfparametro funkcijų apibrėžimą klasės viduje, tačiau metodą pavadinome tiesiog harry.greet()be jokių argumentų. Tai vis tiek veikė.

Taip yra todėl, kad kai objektas iškviečia savo metodą, pats objektas perduodamas kaip pirmasis argumentas. Taigi, harry.greet()išversta į Person.greet(harry).

Apskritai metodo iškvietimas su n argumentų sąrašu yra tolygus atitinkamos funkcijos iškvietimui su argumentų sąrašu, kuris sukuriamas įterpiant metodo objektą prieš pirmąjį argumentą.

Dėl šių priežasčių pirmasis klasės funkcijos argumentas turi būti pats objektas. Tai paprastai vadinama savimi. Galima pavadinti kitaip, tačiau mes labai rekomenduojame laikytis konvencijos.

Dabar turite būti susipažinę su klasės objektu, egzemplioriaus objektu, funkcijos objektu, metodo objektu ir jų skirtumais.

Konstruktoriai „Python“

Klasės funkcijos, kurios prasideda dvigubu pabraukimu __, vadinamos specialiosiomis funkcijomis, nes turi ypatingą reikšmę.

Ypač svarbu yra __init__()funkcija. Ši speciali funkcija iškviečiama kiekvieną kartą, kai sukuriamas naujas tos klasės objektas.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 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)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Bet kurį objekto atributą galima bet kada ištrinti naudojant delteiginį. Pabandykite šiuos veiksmus „Python“ apvalkale, kad pamatytumėte išvestį.

 >>> 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'

Mes netgi galime ištrinti patį objektą, naudodamiesi del sakiniu.

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

Tiesą sakant, tai yra sudėtingiau nei tai. Kai tai padarysime c1 = ComplexNumber(1,3), atmintyje sukuriamas naujas egzemplioriaus objektas ir pavadinimas c1 su juo susisieja.

Komandoje del c1šis susiejimas pašalinamas, o vardas c1 ištrinamas iš atitinkamos vardų srities. Tačiau objektas ir toliau egzistuoja atmintyje ir, jei prie jo nėra susietas joks kitas vardas, vėliau jis automatiškai sunaikinamas.

Šis automatinis nereikalaujamų objektų sunaikinimas „Python“ taip pat vadinamas šiukšlių surinkimu.

Ištrynus objektus „Python“, bus pašalintas pavadinimo įrišimas

Įdomios straipsniai...