Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 30, 2020 21:01:19

daivd_yusupov
Зарегистрирован: 2020-09-30
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование объектов

 # -*- coding: utf-8 -*-
import win32com.client
# Пробуем описать базовый класс
# Описываем класс, который содержит объект lotus_object, который удаляется __del__
class CustonLotusObject:
    def __init__(self):
        self.lotus_object = None
    def __del__(self):
        del lotus_object
# Сессия
class LotusSession(CustonLotusObject):
    '''Установка соединение с lotus domino'''
    def __init__(self):
        CustonLotusObject.__init__(self)
        self.lotus_object = win32com.client.Dispatch('Lotus.NotesSession')
        
    # Инициализации соединение
    def set_initialize_session(self, password):
        '''инициализация сессии'''
        self.lotus_object.Initialize(password)
    def get_environment_string(self, name):
        return self.lotus_object.GetEnvironmentString(name)
    # Сервер соединение
    def get_server(self, name_db):
        '''получить сервер'''
        return self.get_environment_string('SRV' + name_db)
    # Путь базы данных
    def get_path(self, name_db):
        '''путь к базе'''
        return self.get_environment_string('DB' + name_db)
# База данных
class LotusDataBase(CustonLotusObject):
    '''Соединение базы данных'''
    def __init__(self, session, server, path):
        CustonLotusObject.__init__(self)
        self.lotus_object = session.lotus_object.GetDatabase(
            server, path, False)
        self.session = session
    def ReplicaID(self):
        return self.lotus_object.ReplicaID
# узел данных
class LotusItem:
    pass
# Доступ к данным
class LotusDocument:
    pass
# Коллекция документов
class LotusDocumentCollection(CustonLotusObject):
    def __init__(self, database):
        CustonLotusObject.__init__(self)
        self.database = database
    # Заросить список всех объетов
    def set_all_select_document_collection(self):
        self.lotus_object = database.lotus_object.AllDocuments
        
# Представление данных
class LotusView:
    pass
        
        
notesPass = "124135"
s = LotusSession()
s.set_initialize_session(notesPass)
server = s.get_server('organization')
path = s.get_path('Organization')
db = LotusDataBase(s, server, path)
print('сервер: ', server)
print('путь: ', path)
print('replica_id: ', db.ReplicaID())
del db
del s

после
del db
del s

генерируется ошибка

Exception ignored in: <function CustonLotusObject.__del__ at 0x015CD1D8>
Traceback (most recent call last):
File “x-wingide-python-shell/85882368/2”, line 11, in __del__
UnboundLocalError: local variable ‘lotus_object’ referenced before assignment
Exception ignored in: <function CustonLotusObject.__del__ at 0x015CD1D8>
Traceback (most recent call last):
File “x-wingide-python-shell/85882368/2”, line 11, in __del__
UnboundLocalError: local variable ‘lotus_object’ referenced before assignment

Отредактировано daivd_yusupov (Сен. 30, 2020 21:02:34)

Офлайн

#2 Сен. 30, 2020 23:15:11

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Наследование объектов

 del self.lotus_object
хотя можно сделать и
 self.lotus_object = None
разницы особо никакой.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Сен. 30, 2020 23:20:07)

Офлайн

#3 Окт. 1, 2020 00:21:40

daivd_yusupov
Зарегистрирован: 2020-09-30
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование объектов

PEHDOM
Спасибо, только начал переезд по разработки с Delphi на python

Офлайн

#4 Окт. 1, 2020 09:31:43

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Наследование объектов

daivd_yusupov
начал переезд по разработки с Delphi на python
понятно, несмотря на то что __del__ типа деструктор, в большинстве случаев использование __del__ излишне.
__del__ вызывается, когда сборщик мусора собирает объекты, а не когда вы теряете последнюю ссылку на объект или при выполнении del object .
Методы __del__ могут препятствовать сбору мусора при чрезмерном использовании. В частности,в циклических ссылках где имеется несколько методов __del__ , не будет собираться мусор. Это связано с тем, что сборщик мусора не знает, какой из них следует вызвать первым.
Исключения, явно выраженные в __del__ , игнорируются.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Окт. 1, 2020 09:32:05)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version