Есть ли способ выполнить работу по завершению кода Python при наследовании от массива переменных классов?

#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. идеально! Спасибо!