English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base Python

Controllo dei flussi Python

Funzione in Python

Tipi di dati in Python

Operazioni di file Python

Oggetti e classi Python

Data e ora Python

Conoscenze avanzate Python

Manuale di riferimento Python

Classe e oggetto in Python

In questo articolo, imparerai le funzionalità principali di Python, gli oggetti e le classi di Python. Imparerai cosa è una classe, come crearla e come utilizzarla nel programma.

Cos'è una classe e un oggetto in Python?

Python è un linguaggio di programmazione orientato agli oggetti. A differenza della progettazione di programmi orientati ai processi, che si concentra principalmente sulle funzioni, la progettazione orientata agli oggetti si concentra sugli oggetti.

Un oggetto è una raccolta di dati (variabili) e dei metodi (funzioni) che agiscono su questi dati. E la classe è il piano dell'oggetto.

Possiamo considerare la classe come una bozza (prototipo) della casa. Contiene tutte le dettagli riguardanti pavimenti, porte, finestre e così via. Sulla base di queste descrizioni, costruiamo la casa. La casa è un oggetto.

Poiché possiamo creare molte case attraverso la descrizione, possiamo creare molti oggetti in base alla classe. Gli oggetti sono anche chiamati esempi della classe, e il processo di creazione dell'oggetto si chiamaEsempializzare.

Definire una classe in Python

come la definizione di una funzione con la parola chiavedefAlla fine, in Python, utilizziamo la parola chiaveclassdefines aClass.

The first string is called docstring and has a brief description of the class. Although it is not mandatory, it is recommended to do so.

This is a simple class definition.

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

A class creates a new localNamespaceand define all its properties within it. Properties can be data or functions.

There are also some special attributes that start with double underscores (__). For example, __doc__ gives us the documentation string of the class.

Once a class is defined, a new class object with the same name is created. This class object allows us to access different properties and instantiate new objects of the class.

class MyClass:
	"This is my second class"
	a = 10
	def func(self):
		print('Hello')
# Output: 10
print(MyClass.a)
# Output: <function MyClass.func at 0x0000000003079BF8>
print(MyClass.func)
# Output: 'This is my second class'
print(MyClass.__doc__)

When the program is run, the output is:

10
<function 0x7feaa932eae8="" at="" myclass.func="">
This is my second class

Creating objects with Python

We have seen that class objects can be used to access different properties.

It can also be used to create a new instance of the class (instantiation). The process of creating an object is similar toFunctionCall.

>>> ob = MyClass()

This will create a new instance object ob. We can access the properties of the object using the object name prefix.

Attributes can be data or methods. The methods of an object are the corresponding functions of the class. Any function object that is a class attribute defines a method for the class's object.

This means that since MyClass.func is a function object (a class attribute), ob.func will become a method object.

class MyClass:
	"This is my second class"
	a = 10
	def func(self):
		print('Hello')
# Create a new MyClass
ob = MyClass()
# Output: <function MyClass.func at 0x000000000335B0D0>
print(MyClass.func)
# Output: <bound method MyClass.func of <__main__.MyClass object at 0x000000000332DEF0>>
print(ob.func)
# Chiamando la funzione func()
# Output: Hello
ob.func()

Forse hai notato il parametro self nella definizione della funzione interna della classe, ma abbiamo solo abbreviato questo metodo come ob.func(), senzaParametro. Questo è ancora valido.

Questo è perché, ogni volta che un oggetto chiama il suo metodo, l'oggetto stesso viene passato come primo parametro. Pertanto, ob.func() viene automaticamente convertito in MyClass.func(ob).

Di solito, chiamare un metodo con una lista di n parametri è equivalente a chiamare una funzione con una lista di parametri creata inserendo l'oggetto del metodo prima del primo parametro.

Per questi motivi, il primo parametro della funzione nella classe deve essere l'oggetto stesso. Questo viene solitamente chiamatoself. Puoi usarli con altri nomi, ma ti consigliamo vivamente di seguire le convenzioni.

Ora, devi essere familiare con oggetti di classe, oggetti di esempio, oggetti di funzione, oggetti di metodo e le loro differenze.

Costruttore in Python

Le funzioni di classe che iniziano con due underscore (__ ) sono chiamate funzioni speciali perché hanno un significato speciale.

__init__() è particolarmente utile. Ogni volta che viene istanziato un nuovo oggetto della classe, viene chiamata questa funzione speciale.

Questo tipo di funzione nel programmazione orientata agli oggetti (OOP) è chiamata costruttore. Di solito lo usiamo per inizializzare tutte le variabili.

class ComplexNumber:
    def __init__(self, r = 0, i = 0):
        self.reale = r
        self.immaginaria = i
    def getData(self):
        print("{0}+{1}j".format(self.reale, self.immaginaria))
# Crea un nuovo oggetto ComplexNumber
c1 = ComplexNumber(2, 3)
# Chiamata alla funzione getData()
# Output: 2+3j
c1.getData()
# Crea un altro oggetto ComplexNumber
# E crea un nuovo attributo "attr"
c2 = ComplexNumber(5)
c2.attr = 10
# Output: (5, 0, 10)
print((c2.reale, c2.immaginaria, c2.attr))
# L'oggetto c1 non ha l'attributo "attr"
# Errore di attributo: l'oggetto 'ComplexNumber' non ha l'attributo 'attr'
c1.attr

Nell'esempio precedente, abbiamo definito una nuova classe per rappresentare i numeri complessi. Ha due funzioni, __init__() per inizializzare le variabili (di default zero), getData() per visualizzare correttamente il numero.

Una cosa interessante da notare nei passaggi precedenti è che è possibile creare dinamicamente attributi degli oggetti. Abbiamo creato un nuovo attributo attr per l'oggetto c2 e lo abbiamo letto. Questo non ha creato l'attributo per l'oggetto c1.

Eliminazione di attributi e oggetti

Possiamo utilizzare la dichiarazione del per eliminare qualsiasi attributo dell'oggetto in qualsiasi momento. Eseguiamo l'operazione seguente nel Python Shell per visualizzare l'output.

>>> c1 = ComplexNumber(2,3)
>>> del c1.imag
>>> c1.getData()
Traceback (chiamata più recente in basso):
...
AttributeError: l'oggetto 'ComplexNumber' non ha l'attributo 'imag'
>>> del ComplexNumber.getData
>>> c1.getData()
Traceback (chiamata più recente in basso):
...
AttributeError: l'oggetto 'ComplexNumber' non ha l'attributo 'getData'

Possiamo anche utilizzare la dichiarazione del per eliminare l'oggetto stesso.

>>> c1 = ComplexNumber(1,3)
>>> del c1
>>> c1
Traceback (chiamata più recente in basso):
...
NameError: il nome 'c1' non è definito

In realtà, è più complesso di così. Dopo aver completato, verrà creato un nuovo esempio di oggetto nella memoria c1 = ComplexNumber(1,3), il nomec1e il legame.

Il comando del c1 eliminerà questo legame e cancellerà il nome dallo spazio dei nomi corrispondentec1Tuttavia, l'oggetto continua a esistere nella memoria, e se non esiste un altro nome associato, l'oggetto verrà distrutto automaticamente in seguito.

In Python, questo processo di distruggimento automatico di oggetti non utilizzati è noto anche come recupero di memoria.