Προσδιοριστές πρόσβασης (Access Modifiers)

Με τους προσδιοριστές πρόσβασης μπορούμε να ορίσουμε το επίπεδο πρόσβασης που μπορεί να έχει ένα αντικείμενο στα μέλη της κλάσης (ιδιότητες και μέθοδοι).

Όπως σε όλες τι OOP γλώσσες υπάρχουν τρία επίπεδα πρόσβασης.

public

Στην python όλες οι ιδιότητες και μέθοδοι είναι public εξ'ορισμού.

Στα public μέλη είναι δυνατή η πρόσβαση εκτός κλάσης.

class Product:

  def __init__(self):
    self.price = 100

  def setNewPrice(self, price):
    self.price = price

p = Product() # δημιουργία αντικειμένου
print(p.price) # πρόσβαση στην ιδιότητα price (read)
p.price = 200 # πρόσβαση στην ιδιότητα price (write)
print(p.price) # 200

protected

Στα protected μέλη είναι δυνατή η πρόσβαση από υποκλάσεις.

Για να δηλώσετε ότι μια ιδιότητα ή μέθοδος είναι protected προσθέτετε την κάτω παύλα (underscore) στό όνομά της.

class Product:
  def __init__(self, name, price):
    self._name = name # protected ιδιότητα 
    self._price = price # protected ιδιότητα

  def _setNewPrice(self, price): # protected μέθοδος 
     self._price = price


class Apple(Product): # κληρονομεί την Product

  def setNewCategory(self, category):
    self.category = category

apple = Apple("Μήλο", 100) # καλείται η __init__ της Product
print(apple._name) # πρόσβαση στην protected
apple._setNewPrice(200) # πρόσβαση στην protected
print(apple._price) # πρόσβαση στην protected

class Orange: # δεν κληρονομεί την Product
  def setNewCategory(self, category):
    self.category = category

private

Οι private μπορούν να κληθούν μόνο μέσα από την ίδια κλάση που έχουν δηλωθεί.

Για να δηλώσετε ότι μια ιδιότητα ή μέθοδος είναι private προσθέτετε δύο κάτω παύλες (underscore) στό όνομά της.

class Product:
  def __init__(self, name, price):
    self.__name = name # private ιδιότητα 
    self.__price = self.__checkPrice(price) # private ιδιότητα

  def __checkPrice(self, price): # private μέθοδος 
    # check if price is valid
     return price

  def getName(self): # public μέθοδος 
    return self.__name

  def getPrice(self): # public μέθοδος 
    return self.__price
  

p = Product("Μήλο", 100)
print(p.getName())
print(p.getPrice())