Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 6, 2016 08:48:24

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

Как вызвать метод из другого класса?



Есть класс ObjectList
Имеет внутри себя атрибут список объектов

lisyObject = [ObjectItem_1, ObjectItem_2, ... ObjectItem_n]

В классе ObjectList определен метод searchObjectItem, который должен возвращать ссылку на объект из списка.
Можно ли вызвать из представления класса ObjectItem метод представления класса ObjectList?

Для этого я должен при создании объектов ObjectItem передавать в них ссылку на того, кто их создает (ObjectList)?
Так можно?
Или есть какие другие более правильные способы?

Отредактировано AxaRu (Июнь 6, 2016 08:50:32)

Офлайн

#2 Июнь 6, 2016 08:55:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как вызвать метод из другого класса?

AxaRu
Имеет внутри себя атрибут список объектов
А вот тут подробнее.
“Имеет внутри себя”, можно трактовать по-разному, атрибут может быть атрибутом класса (типа static), а может быть атрибутом объекта. Смотрите разницу
class Foo:
    a = 1
    
class Foo:
    def __init__(self):
       self.a  = 1


Знаете, лучше покажите код, так будет гораздо проще и нагляднее.



Отредактировано FishHook (Июнь 6, 2016 08:55:24)

Офлайн

#3 Июнь 6, 2016 11:46:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Как вызвать метод из другого класса?

AxaRu
Есть класс ObjectList
Имеет внутри себя атрибут список объектов
Это по-другому рисуется в UML.



Офлайн

#4 Июнь 6, 2016 11:57:19

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

Как вызвать метод из другого класса?

class classItem:
    def someMethod():
        ...
        ...
        # здесь мне нужно вызвать объект, который создан в блоке __main__
        n = itemList.searchItem(param)
        itemList.deleteItem(n)
    
class classItemList:
    self._items = [classItem(), classItem(), classItem(), ...]
    def __init__()
        ...
    def deleteItem(n):
        # удаляем элемент n из self.items
        ...
    def searchItem(param):
        # возвращаем индекс элемента n в self._items
        ...
        n = .....
        return n
#
#
if __name__ == "__main__":
    itemsList = classItemList()
    for item in temsList:
        item.someMethod()

Отредактировано AxaRu (Июнь 6, 2016 11:59:18)

Офлайн

#5 Июнь 6, 2016 12:17:52

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Как вызвать метод из другого класса?

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

Офлайн

#6 Июнь 7, 2016 22:51:16

AxaRu
Зарегистрирован: 2015-04-11
Сообщения: 34
Репутация: +  1  -
Профиль   Отправить e-mail  

Как вызвать метод из другого класса?

Всем большое спасибо за комментарии.
Я неверно спроектировал классы. Ошибка состояла в том, что я начал проектирование снизу вверх и из класса с более низким уровнем абстракции пытался управлять действиями класса с более высоким уровнем
Перепроектировал классы и асе стало проще.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version