Как вызвать защищенный метод в Python - простое руководство
class MyClass:
def __init__(self):
self._protected_method()
def _protected_method(self):
print("Вызов защищенного метода")
obj = MyClass()
Детальный ответ
Как вызвать protected метод python
В программировании на языке Python, у нас есть три уровня доступа к методам и переменным класса: public, protected и private.
Public, Protected и Private
Public методы и переменные могут быть доступны из любого места в программе. Они обозначаются обычно без каких-либо декораторов или префиксов.
class MyClass:
def public_method(self):
pass
def public_variable(self):
self.public_var = 10
Protected методы и переменные обозначаются префиксом с одним нижним подчеркиванием. Они могут быть доступны только внутри класса и его подклассов.
class MyClass:
def _protected_method(self):
pass
def _protected_variable(self):
self._protected_var = 10
Private методы и переменные обозначаются префиксом с двумя нижними подчеркиваниями. Они могут быть доступны только внутри класса, но не в его подклассах.
class MyClass:
def __private_method(self):
pass
def __private_variable(self):
self.__private_var = 10
Как вызвать protected метод
Чтобы вызвать protected метод внутри класса, вы можете обратиться к нему напрямую, так как protected метод доступен внутри класса и его подклассов.
class MyClass:
def _protected_method(self):
print("Protected method called")
my_obj = MyClass()
my_obj._protected_method()
Вывод:
Protected method called
Однако, когда вы пытаетесь вызвать protected метод извне класса, вы получите ошибку AttributeError. Это происходит потому что концепция protected предполагает доступ только изнутри класса и его подклассов.
class MyClass:
def _protected_method(self):
print("Protected method called")
my_obj = MyClass()
my_obj._protected_method() # Работает
obj = SomeOtherClass()
obj._protected_method() # AttributeError
Чтобы обойти эту ошибку и вызвать protected метод извне класса, можно воспользоваться концепцией имен манглирования и обратиться к методу по новому имени, с добавлением имени класса.
class MyClass:
def _protected_method(self):
print("Protected method called")
my_obj = MyClass()
my_obj._MyClass__protected_method()
Вывод:
Protected method called
Теперь protected метод может быть успешно вызван извне класса и вы получите ожидаемый результат.
Заключение
Теперь вы знаете, как вызвать protected метод в языке Python. Помните, что концепция protected предназначена для ограничения доступа только внутри класса и его подклассов, но с помощью манглирования имен вы можете обойти это ограничение и вызвать этот метод извне класса.