#python #autocomplete #pycharm
Вопрос:
Я работаю над шаблонной и расширяемой библиотекой python и хочу сделать что-то вроде этого:
registered_features = [ feature1.feature.Support, feature2.feature.Support, feature3.feature.Support, ]
где каждый из них ссылается на класс в структуре каталогов, подобной этой:
feature1 --feature.py
и внутри feature.py является
class Support: def someExtendedFunctionality(self): ....
Тогда я унаследую все вот так:
class App(*registered_features): def __init__(self): ....
Все работает во время выполнения, но проблема, с которой я столкнулся, заключается в завершении кода, я не получаю предложений по «зарегистрированным функциям».
Есть ли какой-нибудь способ заставить это работать? Я предполагаю, что завершение кода-это статический анализ, а расширение этого списка-операция во время выполнения. Есть ли другой способ сделать что-то подобное?
Ответ №1:
Я предполагаю, что классы в registered_features
не меняются, и вы используете его как статический объект для хранения списка классов. Если нет, и он меняется во время выполнения, статический анализ не сможет помочь с завершением кода.
Итак, предполагая, что это статический класс, вы можете заменить его этим:
class RegisteredFeatures(SupportA, SupportB, SupportC): pass class App(RegisteredFeatures): pass
Вместо того, чтобы использовать объект списка для хранения всех классов, вы используете класс, который делает примерно то же самое. Я протестировал это, и завершение кода работает с Pycharm 2021.2.3
Комментарии:
1. идеально! Спасибо!