Форум сайта python.su
0
Можно ли у родительского класса отнаследовать приватный метод или приватную переменную?
class A: __var = "secret variable" class C(A): def try1(self): print(super().__var) # 'super' object has no attribute '_C__a' def try2(self): print(self.__var) # 'C' object has no attribute '_C__a' def try3(self): print(self._A__var) # 'C' object has no attribute '_A__var'
Отредактировано dredsss (Окт. 27, 2018 20:21:04)
Офлайн
1
Она наследуется. Её вызвать нельзя, но это не значит, что она куда-то девается в дочернем классе
Офлайн
0
Papa_SvinПричем тут вызвать, это - переменная. А на кой она мне нужна и на кой интерпретатору тратить напросто память на переменные, к которым у класса доступа нет и никак они на него не влияют.
Она наследуется. Её вызвать нельзя, но это не значит, что она куда-то девается в дочернем классе
Офлайн
294
dredsssну начнем с того что память он и не тратит, почитайте чтоле как работают классы и наследование в пайтоне. Когда вы создаете класс наследник, он не тянет в себя все что было у родителя. Он просто хранит ссылку на родителя, и если чегото у себя не находит спрашивает у родителя. Поэтому память не тратиться.
на кой интерпретатору тратить напросто память на переменные, к которым у класса доступа нет и никак они на него не влияют.
dredsssОткуда же нам знать. Вы странный, сначала создали private переменную, а потом жалуетесь что не можете к ней получить доступ “извне”. Так устроен пайтон что переменные начинающиеся с “__” кагбе считаються private. Это если совсем по простому. На самомо деле двойное подчеркивание “__” не означает “private” по аналогии с С++ или Java, это скорее псевдопривантые переменные. Вы используете их для определения переменных, которые являются “локальными по классу”.
это - переменная. А на кой она мне нужна
... class C(A): def try2(self): print(A._A__var) print(C._A__var) c = C() c.try2() >>> secret variable secret variable >>>
[code python][/code]
Отредактировано PEHDOM (Окт. 27, 2018 23:24:09)
Офлайн
1
dredsssНу как это не влияют!!!
А на кой она мне нужна и на кой интерпретатору тратить напросто память на переменные, к которым у класса доступа нет и никак они на него не влияют.
class Foo: def __init__(self): self.__value = 25 def get_value(self): return self.__value class Bar(Foo): def __init__(self): super().__init__() self.__value = 12 def print(self): print(self.get_value() + self.__value) b = Bar() b.print()
Отредактировано Papa_Svin (Окт. 28, 2018 08:43:16)
Офлайн