crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в ООП в Python, а есть ли?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 14.11.2010, 23:40
 
Цитата(Litkevich Yuriy @ 15.11.2010, 2:52) *
QWidget.resizeEvent(event);
эту штуку победил.
Нужно так вызывать метод базового класса:
QWidget.resizeEvent(self, event);
, т.е. передавать все аргументы, в том числе и ссылку на экземпляр класса (здесь self)
Litkevich Yuriy Дата 14.11.2010, 22:52
 
class Qt5WayButton(QWidget):
    def __init__(self, parent = None):
        QWidget.__init__(self, parent)
        sp = QSizePolicy();
        sp.setHeightForWidth(True);
        setSizePolicy(sp);
этот код даёт такую ошибку:
Цитата
setSizePolicy(sp);
NameError: global name 'setSizePolicy' is not defined


Цитата(Litkevich Yuriy @ 15.11.2010, 2:33) *
setSizePolicy(sp);
это метод QWidget-а, так как к нему обращатся?
например на update() подобной ругани я не видел

Цитата(Litkevich Yuriy @ 15.11.2010, 2:35) *
например на update() подобной ругани я не видел
не на него тоже ругается.

так унаследованные методы нужно вызывать как свои собственные, вроде интерпретатор перестаёт ругаться.

А как быть с методами базового класса, вроде следуя аналогии в конструкторе:
Цитата
BaseClass.__init__(self)
я делаю тоже для другого метода:
...
    def resizeEvent(self, event):
        # update masks
        self.m_upButton.updateMask();
        self.m_downButton.updateMask();
        self.m_leftButton.updateMask();
        self.m_rightButton.updateMask();
        self.m_centerButton.updateMask();

        QWidget.resizeEvent(event);
и получаю такую ошибку:
Цитата
QWidget.resizeEvent(event);
TypeError: descriptor 'resizeEvent' requires a 'PySide.QtGui.QWidget' object but received a 'PySide.QtGui.QResizeEvent'


сообщения об ошибке я вообще не понимаю.
descriptor - описатель, причём здесь описатель?
requires - требует, что значит требует? в качестве аргумента?
Sokoloff Дата 14.11.2010, 22:14
 
Цитата(Litkevich Yuriy @ 14.11.2010, 19:37) *
Вроде ООП в питоне есть, и вроде наследование есть.

Но почему-то наталкиваюсь на проблему:
class SubClass(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        # ...
        method(args)
где method(args) - это метод базового класса или ещё дальше по иерархии.
При таком варианте получаю ошибку:
Цитата
NameError: global name 'method' is not defined

почему?

неужели нужно писать имя базового класса перед методом и, как следствие, всё время помнить в каком из родительских классов этот метод был введён?


В отличие от C++ питон не подставляет по умолчанию self(сишный this). Т.е. правильно вызывать надо так:
lass SubClass(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        self.method(args)

Litkevich Yuriy Дата 14.11.2010, 18:37
  Вроде ООП в питоне есть, и вроде наследование есть.

Но почему-то наталкиваюсь на проблему:
class SubClass(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        # ...
        method(args)
где method(args) - это метод базового класса или ещё дальше по иерархии.
При таком варианте получаю ошибку:
Цитата
NameError: global name 'method' is not defined

почему?

неужели нужно писать имя базового класса перед методом и, как следствие, всё время помнить в каком из родительских классов этот метод был введён?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 4:38