IPython自动完成:通过@property装饰器访问子类属性

时间:2019-05-14 10:51:04

标签: python python-3.x oop properties ipython

简介

您要描述燃烧过程的图像

为了排序元素,我创建了

  • 用于描述物质的类(例如,燃料类)
  • 描述燃烧的类(等同于类燃烧)
  • main.py来运行示例

Python文件

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中自动完成burner.fuel.ultimate ipython控制台,因此人们可以直观地使用它。

示例

  • burner.fuel.ultimate.comp被识别
  • burner.fuel.ultimate识别

在ipython控制台中,看不到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} 以外的任何方法或属性。当人们不知道这些方法存在时,这使得人们不直观地使用它。

备注: IDE pycharm的ipython控制台运行正常!?

python控制台

在python控制台中运行它:

<ion-content padding>
    <ion-list radio-group>
        <ion-list-header>
            Auto Manufacturers
        </ion-list-header>
        <ion-item *ngFor="let entry of array">

            <ion-radio (click)="getVal()" slot="start" [value]="entry"></ion-radio>
            <ion-label>&nbsp; {{entry}}</ion-label>
        </ion-item>
    </ion-list>
</ion-content>

工作正常。但是为什么不从终端在ipython控制台中呢?

0 个答案:

没有答案