наследование Python видимость переменных
class A:
def ptr(self):
self.t = 5
class B:
def ptr2(self):
self.y = 99
def sum(self):
print(self.t + self.y)
class C(A,B):
def __init__(self):
self.ptr()
self.ptr2()
ups = C()
ups.sum()
С наследует A и B, то есть у С есть атрибуты этих классов(ptr,ptr2,sum), к ним могу в любой момент обратиться. в конструкторе вызываю эти методы , в пространство имен добавляются t и y, но когда вызываю Sum почему это работает, пространство имен у ups t и y, а у B нету t.
Ответы (1 шт):
Я вам попробую ответить на ваш предыдущий вопрос, который вы зачем-то удалили и опубликовали новый вопрос, который аналог предыдущего https://ru.stackoverflow.com/questions/1129347
Когда вы наследуетесь от Left_Bar - self.leftlist
становится атрибутом класса Manager и доступен во всех методах этого класса Manager.
Когда вы наследуетесь от Widget2 - методы stack2UI и push_me становятся
также объектами класса Manager и в них доступны все атрибуты класса Manager,
в том числе и self.leftlist.
То что вы написали с множественным наследованием - эквивалентно тому, что я написал ниже:
import sys
from PyQt5.QtWidgets import QWidget, QStackedWidget,QHBoxLayout,QApplication, \
QListWidget, QPushButton, QVBoxLayout
#class Manager(QWidget, Left_Bar, Widget2): # ---
class Manager(QWidget): # +++
def __init__(self):
super().__init__()
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.leftlist = QListWidget()
self.leftlist.insertItem(0, 'Редактор')
self.leftlist.insertItem(1, 'future')
# self.stack2UI() # ---
self.stack2 = QWidget()
self.button = QPushButton('push me')
self.layout = QVBoxLayout()
self.layout.addWidget(self.button)
self.button.clicked.connect(self.push_me)
self.button.setToolTip("don't push")
self.stack2.setLayout(self.layout)
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.Stack = QStackedWidget(self)
self.Stack.addWidget(self.stack2)
hbox = QHBoxLayout(self) # расположение макета
hbox.addWidget(self.leftlist)
hbox.addWidget(self.Stack)
self.setLayout(hbox)
self.leftlist.currentRowChanged.connect(self.display)
self.setGeometry(10, 10, 700, 500)
self.setWindowTitle('manager')
self.show()
def display(self, i):
self.Stack.setCurrentIndex(i)
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def push_me(self):
self.button.hide()
self.leftlist.hide() # почему он видит leftlist
hbox = QHBoxLayout()
self.layout.addLayout(hbox)
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def main():
app = QApplication(sys.argv)
ex = Manager()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
