Автозаполнение IPython: доступ к свойствам подкласса через декоратор @property - PullRequest
0 голосов
/ 14 мая 2019

Введение

Изображение, которое вы хотите описать процесс сгорания

Чтобы отсортировать элементы, я создал

  • классы для описания вещества (ур.класс Fuel)
  • класс, который описывает сгорание (уравнение сгорания)
  • main.py для запуска примера

Python Files

properties.py

class SolidProp:

    def __init__(self,ua):
        self._ultimate = Ultimate(ua)

    @property
    def ultimate(self):
        return self._ultimate

class Ultimate:

    def __init__(self,ua: dict):
        self._comp = ua

    @property
    def comp(self):
        return self._comp

combustion.py

from properties import *

class Combustion:

    def __init__(self,ultimate):

        self.fuel = SolidProp(ua=ultimate)

main.py

from combustion import *

burner = Combustion({'CH4':0.75, 'C2H4':0.25})

Описание проблемы

консоль ipython

В консоли ipython (в bash) следующее не распознается автоматически (но его можно вызвать):

Python 3.7.2 (default, Dec 29 2018, 06:19:36) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: run 'main.py'

In [2]: burner.fuel.ultimate.comp
Out[2]: {'CH4': 0.75, 'C2H4': 0.25}

Это как-то связано с тем, что *.ultimate определяется через декоратор в properties.py (см. @property), но я хотел бы иметь возможность получать *.ultimate.comp автозаполнением в консоли ipython, поэтомулюди могут работать с ним интуитивно.

Пример

  • burner.fuel.ultimate распознано
  • burner.fuel.ultimate.comp НЕ распознано

Я не вижу никаких методов или свойств, кроме burner.fuel.ultimate, в консоли ipython.Из-за этого люди не могут интуитивно работать с ним, когда они не знают, что эти методы существуют.

Примечание: ipython-консоль IDE pycharm работает отлично!console

Запуск его в консоли python:

Python 3.7.2 (default, Dec 29 2018, 06:19:36) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exec(open("main.py").read())
>>> burner.fuel.ultimate.comp
{'CH4': 0.75, 'C2H4': 0.25}

Работает нормально.Но почему не в консоли ipython из терминала?

...