Metodi privati in Python

Rayven Esplanada 3 gennaio 2023
  1. il modificatore di accesso privato in Python
  2. Dichiarare un metodo privato in Python
Metodi privati in Python

Questo tutorial mostra come dichiarare, manipolare e utilizzare metodi privati ​​in Python.

private è una parola chiave per un tipo di modificatore di accesso utilizzato nei linguaggi di programmazione orientati agli oggetti. I modificatori di accesso limitano in una certa misura la visibilità di una funzione o di una variabile. Dichiarare la propria funzione/variabile come privata limita l’accesso solo alla classe che la incapsula.

Un confronto nella vita reale con un metodo privato sarebbe un sistema di illuminazione domestica. L’interruttore della luce e la lampadina sono come metodi pubblici perché la persona ha accesso diretto e visibilità ad essi. Allo stesso tempo, i fili elettrici all’interno della gomma protettiva sono i metodi privati ​​poiché generalmente non sono visibili se non manomessi, ma continuano a svolgere il loro lavoro senza essere per la maggior parte curati.

il modificatore di accesso privato in Python

In Python, i metodi privati ​​sono metodi a cui non è possibile accedere al di fuori della classe in cui è dichiarato né a nessun’altra classe base.

Per dichiarare un metodo privato in Python, inserisci i doppi caratteri di sottolineatura all’inizio del nome del metodo.

il metodo __init__()

Un notevole metodo privato in Python è il metodo __init__(), che viene utilizzato come costruttore di classi per un oggetto di classe. Questo metodo viene chiamato quando viene istanziato un oggetto di una classe, a seconda degli argomenti del metodo.

Ad esempio, dichiara una classe Person con due campi e un metodo __init__():

Python
 pythonCopyclass Person:
    name = ""
    age = 0

    def __init__(self, n, a):
        self.name = n
        self.age = a

Ora, per accedere al metodo privato __init__() al di fuori della classe, avremmo bisogno di accedervi dall’oggetto della classe stessa dopo averlo istanziato.

Ad esempio, in un altro file nella stessa directory, creare un’istanza della classe Person e chiamare il costruttore utilizzando il nome della classe.

Python
 pythonCopyfrom personClass import Person

sys.path.append(".")


person = Person("John Doe", 25)

print(person.name, person.age)

Produzione:

 textCopyJohn Doe   25
Nota
Per importare classi da un altro file nel file corrente, utilizzare sys.path.append() con la directory del percorso della stringa della classe che si desidera importare come argomento. In questo caso, entrambi i file risiedono nella stessa cartella, quindi un punto . è sufficiente. Successivamente, importa la classe (Person) dal file .py (personClass.py).

Il metodo __init__() può essere chiamato esplicitamente dopo aver istanziato la classe Person in una variabile per istanziare nuovamente l’oggetto.

Per esempio:

Python
 pythonCopyperson = Person("John Doe", 25)
person.__init__("Jane Doe", 29)

print(person.name, person.age)

Produzione:

 textCopyJane Doe   29

Inoltre, il metodo __init()__ può essere chiamato esplicitamente chiamandolo dalla classe stessa. Sebbene per questo approccio, dovresti inserire esplicitamente il primo parametro self negli argomenti.

Python
 pythonCopyperson = Person("John Doe", 25)
Person.__init__(person, "Jack Sparrow", 46)  # person is the 'self' argument

print(person.name, person.age)

Produzione:

 textCopyJack Sparrow   46

Tutti questi approcci mantengono la proprietà privata del metodo __init__().

Ora che questo metodo integrato è stato sezionato. Passiamo all’implementazione concreta dei nostri metodi privati ​​in una classe e alla differenziazione del suo accesso da un metodo pubblico.

Dichiarare un metodo privato in Python

Per dichiarare un metodo privato, premettere al metodo in questione il doppio carattere di sottolineatura __. In caso contrario, verrà trattato come un metodo pubblico predefinito.

Estendiamo la classe Person dell’esempio precedente e creiamo una sottoclasse Employee che basa il suo costruttore sulla classe Person.

Inoltre, crea due nuovi metodi all’interno della classe person, un metodo pubblico e uno privato.

Python
 pythonCopyclass Person:
    name = ""
    age = 0

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def walk(self):
        print("Walking")

    def __call(self):
        print("Taking a call")

Ora, crea la classe o sottoclasse derivata Employee che estende Person:

Python
 pythonCopyclass Employee(Person):
    occupation = "Unemployed"
    salary = 0

    def __init__(self, name, age, occupation, salary):
        Person.__init__(self, name, age)
        self.occupation = occupation
        self.salary = salary

    def work(self):
        print("Employee is working")
        self.walk()

    def takeCall(self):
        self.__call()
        print("Employee is taking a call")
Nota
Per estendere una classe a un’altra classe, aggiungi un argomento alla dichiarazione della classe che è il nome della classe della classe genitore. In questo caso, l’argomento è la classe Person.

In questa classe, i metodi work() e takeCall() chiamano esternamente le classi walk() e __call() dalla classe genitore Person, rispettivamente.

L’altro metodo chiama esternamente un metodo pubblico e l’altro chiama un metodo privato dalla classe padre. Vediamo come funziona questo comportamento quando lo eseguiamo.

Ad esempio, date le dichiarazioni di classe sopra:

Python
 pythonCopyemployee_1 = Employee("John Doe", 25, "Software Engineer", 40000)

employee_1.work()
employee_1.takeCall()

Produzione:

 textCopyEmployee is working
Walking
Traceback (most recent call last):
  File "python/demo.py", line 35, in <module>
    employee_1.takeCall()
  File "python/demo.py", line 29, in takeCall
    self.__call()
AttributeError: 'Employee' object has no attribute '_Employee__call'

La chiamata al metodo work() viene eseguita con successo, stampando le istruzioni del metodo work() e walk(). Tuttavia, la chiamata a takeCall() attiva un AttributeError perché non riconosce il metodo __call() della classe Person come metodo della classe Employee. L’estensione di una classe a un’altra classe non include i propri metodi privati ​​nell’estensione.

In sintesi, i metodi privati ​​in Python sono dichiarati anteponendo un metodo con due caratteri di sottolineatura, __. La dichiarazione di metodi privati ​​consente di riservare un metodo esclusivamente alla classe incapsulante. Una classe che estende un’altra classe con un metodo privato non erediterà quei metodi e attiverà un errore se tenta di accedervi.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Articolo correlato - Python Class