Python osztályok és objektumok (példákkal)

Ebben az oktatóanyagban megismerheti a Python objektumok és osztályok alapvető funkcióit. Megtudhatja, mi az osztály, hogyan lehet létrehozni és használni a programjában.

Videó: Python osztályok és objektumok

Python objektumok és osztályok

A Python egy objektum-orientált programozási nyelv. Az eljárásorientált programozástól eltérően, ahol a fő hangsúly a függvényeken van, az objektumorientált programozás az objektumokra helyezi a hangsúlyt.

Az objektum egyszerűen olyan adatok (változók) és módszerek (függvények) gyűjteménye, amelyek ezekre az adatokra hatnak. Hasonlóképpen, az osztály az adott objektum tervrajza.

Az osztályra úgy gondolhatunk, mint egy ház vázlatára (prototípusára). Minden részletet tartalmaz a padlókról, ajtókról, ablakokról stb. Ezen leírások alapján építjük a házat. A ház az objektum.

Mivel sok ház elkészíthető egy ház tervrajzából, sok tárgyat készíthetünk egy osztályból. Az objektumot egy osztály példányának is nevezik, az objektum létrehozásának folyamatát pedig példányosításnak .

Osztály meghatározása a Pythonban

A függvénydefiníciók a Py kulcsszó def kulcsszavával, az osztálydefiníciók osztály kulcsszóval kezdődnek.

Az első karakterláncot az osztályban docstring-nek hívják, és rövid leírást tartalmaz az osztályról. Bár nem kötelező, ez nagyon ajánlott.

Itt van egy egyszerű osztálydefiníció.

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

Az osztály létrehoz egy új helyi névteret, ahol minden attribútuma meg van határozva. Az attribútumok lehetnek adatok vagy függvények.

Különleges attribútumok is vannak benne, amelyek kettős aláhúzással kezdődnek __. Például __doc__megadja nekünk az adott osztály tanítását.

Amint definiálunk egy osztályt, egy új osztályobjektum jön létre ugyanazzal a névvel. Ez az osztályobjektum lehetővé teszi számunkra a különböző attribútumok elérését, valamint az adott osztály új objektumainak példányosítását.

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

Kimenet

 10 Ez egy személyi osztály

Objektum létrehozása a Pythonban

Láttuk, hogy az class objektum felhasználható különböző attribútumok elérésére.

Használható az adott osztály új objektumpéldányainak (példányosításának) létrehozására is. Az objektum létrehozásának folyamata hasonló a függvényhíváshoz.

 >>> harry = Person()

Ez új objektumpéldányt hoz létre Harry néven. Az objektumok attribútumaihoz az objektumnév előtag használatával férhetünk hozzá.

Az attribútumok lehetnek adatok vagy módszerek. Az objektum metódusai az adott osztály megfelelő funkciói.

Ez azt jelenti, hogy mivel Person.greetegy függvényobjektum (az osztály attribútuma), Person.greetegy metódusobjektum lesz.

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

Kimenet

  Szia 

Lehet, hogy észrevette a selfparamétert a funkciódefinícióban az osztályon belül, de a metódust egyszerűen úgy hívtuk meg, mint harry.greet()minden érv nélkül. Még mindig működött.

Ennek oka, hogy amikor egy objektum meghívja a módszerét, maga az objektum kerül átadásra első argumentumként. Szóval, harry.greet()lefordítva Person.greet(harry).

Általában a metódus n argumentum listájával történő meghívása egyenértékű a megfelelő függvény meghívásával egy argumentumlistával, amely a metódus objektumának az első argumentum előtti beszúrásával jön létre.

Ezen okok miatt a függvény első argumentumának az osztályban magának az objektumnak kell lennie. Ezt hagyományosan énnek hívják. Nevezhetjük másként is, de nagyon ajánljuk, hogy kövesse az egyezményt.

Most ismernie kell az osztályobjektumot, példányobjektumot, függvényobjektumot, metódusobjektumot és azok különbségeit.

Kivitelezők a Pythonban

A kettős aláhúzással kezdődő osztályfüggvényeket __speciális funkcióknak nevezzük, mivel különleges jelentéssel bírnak.

Különösen érdekes a __init__()funkció. Ezt a speciális funkciót akkor hívják meg, ha az adott osztály új objektumát példányosítja.

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

Az objektum bármely attribútuma bármikor törölhető az delutasítás használatával. Próbálja ki a következőket a Python héjon a kimenet megtekintéséhez.

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

Akár magát az objektumot is törölhetjük, a del utasítás segítségével.

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

Valójában ennél bonyolultabb. Amikor ezt megtesszük c1 = ComplexNumber(1,3), egy új példányobjektum jön létre a memóriában, és a c1 név kötődik hozzá.

A parancsnál del c1ez az összerendelés eltávolításra kerül, és a c1 név törlődik a megfelelő névtérből. Az objektum azonban továbbra is létezik a memóriában, és ha nincs más név kötve hozzá, később automatikusan megsemmisül.

A hivatkozás nélküli objektumok automatikus megsemmisítését a Pythonban szemétgyűjtésnek is nevezik.

Objektumok törlése a Pythonban eltávolítja a névkötést

érdekes cikkek...