Python ООП вопрос про теорию
Для роста своего скила и улучшения понимания, задался вопросом про понимание наследования в Python./
У меня есть два класса родитель и наследник, имеющие приватный атрибут __n
.
class A:
__n = "a"
def __init__(self) -> None:
print(self.__n)
class B(A):
__n = "b"
A()
B()
# a
# a
При наследовании из-за искажения имен доступ к новому значению __n
утерян.
Я решаю эту проблему таким способом:
class A:
__n = "a"
def __init__(self) -> None:
print(self.__true_n)
@classmethod
@property
def __true_n(cls):
return getattr(cls, f"_{cls.__name__}__n")
class B(A):
__n = "b"
A()
B()
# a
# b
Хочу разобраться, существует ли более "правильный" или "Питоновский" способ получение доступа к атрибуту __n
?
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Я бы сделал как-то так:
class A:
__n= "Приват A"
@property
def n(self):
return self.__n
class B(A):
__n = "Приват B"
@property
def nA(self):
return super().n
@property
def n(self):
return self.__n
obj_a = A()
obj_b = B()
print(obj_a.n)
print(obj_b.nA)
print(obj_b.n)
Вывод:
Приват A
Приват A
Приват B
[Program finished]