Найти - Пользователи
Полная версия: Как вызвать метод из другого класса?
Начало » Python для новичков » Как вызвать метод из другого класса?
1
AxaRu


Есть класс ObjectList
Имеет внутри себя атрибут список объектов
lisyObject = [ObjectItem_1, ObjectItem_2, ... ObjectItem_n]

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

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


Знаете, лучше покажите код, так будет гораздо проще и нагляднее.
py.user.next
AxaRu
Есть класс ObjectList
Имеет внутри себя атрибут список объектов
Это по-другому рисуется в UML.
AxaRu
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()
Shaman
В большинстве случаев без разницы что где создаётся, лишь бы оно существовало на момент использования. Единственно, к функциям жестко привязаны их globals.
AxaRu
Всем большое спасибо за комментарии.
Я неверно спроектировал классы. Ошибка состояла в том, что я начал проектирование снизу вверх и из класса с более низким уровнем абстракции пытался управлять действиями класса с более высоким уровнем
Перепроектировал классы и асе стало проще.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB