Найти - Пользователи
Полная версия: Организация кода, специфичного для платформы
Начало » Python для экспертов » Организация кода, специфичного для платформы
1
kaa
Здравствуйте, коллеги.
Есть базовый класс, который в зависимости от платформы (Win, Linux) должен быть реализован по-разному (специфика платформы), одинаков только интерфейс класса. Как правильно (хорошо) организовать этот код? Как это делаете вы? Есть нюанс - хочется, чтобы генератор документации (Epydoc) видел описания обеих реализаций вне зависимости от системы, под которой генератор запускается.
Я сначала тупо сделал так:
import sys
if sys==u'win32':
class SomeClass(object):
u'''Реализация под Windows'''
else:
class SomeClass(object):
u'''Реализация под Linux'''
Такой подход удобен тем, что в прикладном коде можно не задумываясь импортировать модуль и использовать класс. Но Epydoc видит только одну из реализаций, что неудивительно. Можно проверять платформу внутри каждой функции класса, но тогда из-за обилия проверок код станет гораздо менее читабельным.
Александр Кошелев
kaa
Как правильно (хорошо) организовать этот код?
Выстроить иерархию класса, при которой платформено-зависимый код был бы на одном её уровне и вынесен в отдельные модули.
Enchantner
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
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