Как просмотреть все доступы к атрибутам объекта в Python. Переопределение __getattribute__ не работаетPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как просмотреть все доступы к атрибутам объекта в Python. Переопределение __getattribute__ не работает

Сообщение Anonymous »

Я пытаюсь просмотреть все вызовы методов, выполненные во время выполнения объекта типа TestWidget в приведенном ниже коде, переопределив метод getattribute. TestWidget является производным от QWidget, который входит в пакет PyQt5, пакет графического интерфейса, который я пытаюсь понять.

Код: Выделить всё

import sys

from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QWidget, QMainWindow, QApplication

class TestWidget(QWidget):
def __init__(self):
super().__init__()

def __getattribute__(self, name):
print('__getattribute__ called. The attribute is named', name)
return object.__getattribute__(self, name)

def sizeHint(self):
print('sizeHint called')
return QSize(400, 400)

class MyApplication(QMainWindow):
def __init__(self):
super().__init__()

w = TestWidget()
self.setCentralWidget(w)

self.show()

app = QApplication(sys.argv)
window = MyApplication()
sys.exit(app.exec_())
Единственный вывод этого кода на консоль:

Код: Выделить всё

sizeHint called
Итак, очевидно, что sizeHint был вызван в какой-то момент, но не следует вызывать getattribute, когда sizeHint > обращались?
Я считаю, что есть несколько других вызовов методов, производных от QWidget, которые здесь не перехватываются. Как их лучше выявить?
К сожалению, существует очень много методов, унаследованных от QWidget. Если бы их было всего несколько, я бы просто переопределил их вручную и добавил оператор печати, чтобы указать, что они были вызваны, но здесь это выглядит невозможным.
Спасибо за любую помощь! Я делаю это, чтобы лучше понять, как работает PyQt5, но в целом мне кажется полезным знать, как это делать, когда изучаешь работу любого пакета.

Подробнее здесь: https://stackoverflow.com/questions/793 ... etattribut
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»