crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 5.6.2020, 11:17