Уведомления

Группа в Telegram: @pythonsu

#1 Май 10, 2011 20:22:21

kaa
От:
Зарегистрирован: 2009-01-11
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация кода, специфичного для платформы

Здравствуйте, коллеги.
Есть базовый класс, который в зависимости от платформы (Win, Linux) должен быть реализован по-разному (специфика платформы), одинаков только интерфейс класса. Как правильно (хорошо) организовать этот код? Как это делаете вы? Есть нюанс - хочется, чтобы генератор документации (Epydoc) видел описания обеих реализаций вне зависимости от системы, под которой генератор запускается.
Я сначала тупо сделал так:

import sys
if sys==u'win32':
class SomeClass(object):
u'''Реализация под Windows'''
else:
class SomeClass(object):
u'''Реализация под Linux'''
Такой подход удобен тем, что в прикладном коде можно не задумываясь импортировать модуль и использовать класс. Но Epydoc видит только одну из реализаций, что неудивительно. Можно проверять платформу внутри каждой функции класса, но тогда из-за обилия проверок код станет гораздо менее читабельным.



Офлайн

#2 Май 10, 2011 22:42:43

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Организация кода, специфичного для платформы

kaa
Как правильно (хорошо) организовать этот код?
Выстроить иерархию класса, при которой платформено-зависимый код был бы на одном её уровне и вынесен в отдельные модули.



Офлайн

#3 Май 13, 2011 17:13:43

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Организация кода, специфичного для платформы

kaa
мне вот решение Андрея Светлова понравилось - вынести специфичный код в отдельные модули и сделать так:

import sys
from os.path import join, dirname
__path__.append(join(dirname(__file__), sys.platform))
В статье у него написано - http://asvetlov.blogspot.com/2010/05/blog-post.html



Отредактировано (Май 13, 2011 17:14:08)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version