Класе и објекти Питхон-а (са примерима)

У овом упутству ћете научити о основној функционалности Питхон објеката и класа. Научићете шта је час, како га креирати и користити у свом програму.

Видео: Класе и објекти Питхон-а

Питхон објекти и класе

Питхон је објектно оријентисани програмски језик. За разлику од процедура оријентисаног програмирања, где је главни нагласак на функцијама, објектно оријентисано програмирање наглашава објекте.

Објекат је једноставно колекција података (променљивих) и метода (функција) које делују на те податке. Слично томе, класа је нацрт за тај објекат.

О класи можемо размишљати као о скици (прототипу) куће. Садржи све детаље о подовима, вратима, прозорима итд. На основу ових описа градимо кућу. Кућа је објект.

Како се многе куће могу направити од нацрта куће, тако можемо и многе предмете створити из класе. Објекат се такође назива инстанцом класе, а поступак стварања овог објекта назива се инстанцијом .

Дефинисање класе у Питхону

Као што дефиниције функција почињу са кључном речи деф у Питхону, тако и дефиниције класе почињу са кључном речи цласс.

Први низ унутар класе назива се доцстринг и има кратак опис класе. Иако није обавезно, ово се препоручује.

Ево једноставне дефиниције класе.

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

Класа креира нови локални простор имена где су дефинисани сви њени атрибути. Атрибути могу бити подаци или функције.

У њему постоје и посебни атрибути који почињу двоструким доњим цртама __. На пример, __doc__даје нам документе те класе.

Чим дефинишемо класу, креира се нови објект класе са истим именом. Овај објект класе омогућава нам приступ различитим атрибутима као и инстанцирање нових објеката те класе.

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

Оутпут

 10 Ово је час особе

Креирање објекта у Питхону

Видели смо да се објект класе може користити за приступ различитим атрибутима.

Такође се може користити за креирање нових инстанци објекта (инстанцирање) те класе. Поступак за креирање објекта сличан је позиву функције.

 >>> harry = Person()

Ово ће створити нову инстанцу објекта названу Харри. Атрибутима објеката можемо приступити помоћу префикса имена објекта.

Атрибути могу бити подаци или метода. Методе објекта су одговарајуће функције те класе.

То значи рећи, будући да Person.greetје објект функције (атрибут класе), Person.greetбиће објект методе.

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

Оутпут

  Здраво 

Можда сте приметили selfпараметар у дефиницији функције унутар класе, али методу смо позвали једноставно као harry.greet()без икаквих аргумената. И даље је успевало.

То је зато што, кад год објекат позове своју методу, сам објект се прослеђује као први аргумент. Дакле, harry.greet()преводи у Person.greet(harry).

Генерално, позивање методе са листом од н аргумената еквивалентно је позивању одговарајуће функције с листом аргумената која се креира уметањем објекта методе пре првог аргумента.

Из ових разлога, први аргумент функције у класи мора бити сам објекат. Ово се уобичајено назива сопством. Може се назвати и другачије, али топло препоручујемо да се придржавате конвенције.

Сада морате бити упознати са објектом класе, објектом инстанце, објектом функције, објектом методе и њиховим разликама.

Конструктори у Питхону

Функције класе које почињу двоструким доњим цртама __називају се посебним функцијама јер имају посебно значење.

Од посебног интереса је __init__()функција. Ова посебна функција се позива кад год се инстанцује нови објекат те класе.

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

Било који атрибут објекта може се избрисати било када, користећи delнаредбу. Испробајте следеће на Питхон љусци да бисте видели излаз.

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

Можемо чак и избрисати сам објекат, користећи дел наредбу.

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

Заправо је сложеније од тога. Када то учинимо c1 = ComplexNumber(1,3), нови пример инстанце се креира у меморији и име ц1 се везује за њега.

На наредби се del c1ово везивање уклања и име ц1 се брише из одговарајућег простора имена. Објект, међутим, наставља да постоји у меморији и ако за њега није везано ниједно друго име, касније се аутоматски уништава.

Ово аутоматско уништавање нереференцираних објеката у Питхону назива се и сакупљањем смећа.

Брисањем објеката у Питхону уклања се везивање имена

Занимљиви Чланци...