1

最初のクラスで配列を宣言し、それを別のオブジェクトに渡し、この配列内の要素の名前を出力する状況があります。動作しますが、「車」と入力すると。ReadCarNames ide で「名前」が提案されませんか? wing ide 4 proで試しています。メソッド ReadCarNames で車をキャストできますか?

########################################################################
class MyClass:
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        cars=[]
        cars.append(Car('bmw'))
        cars.append(Car('audi'))
        reader=Reader()
        reader.ReadCarNames(cars)

########################################################################
class Car:
    """"""

    #----------------------------------------------------------------------
    def __init__(self,name):
        self.name=name



########################################################################
class Reader:
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
    def ReadCarNames(self,cars):
        for counter,car in enumerate(cars):

            print str(counter) +' '+ car.name
4

4 に答える 4

3

ここを参照してください: http://www.wingware.com/doc/edit/helping-wing-analyze-code

あなたの IDE (Wing) は、どのタイプのオブジェクトが に含まれているかを確実に認識していませんが、assert ステートメントで何が何であるかを伝えることcarsできcar、希望どおりにオートコンプリートを実行します。必要に応じて、翼の目のタイプをキャストするように表示できます。

class Reader:
    def __init__(self):
        """Constructor"""
    def ReadCarNames(self,cars):
        for counter,car in enumerate(cars):
            assert isinstance(car, Car)        # this trains Wing
            print str(counter) +' '+ car.name  # autocompletion will work here

または、そのアサートが常に発生したくない場合は、Wing の SourceAssistant が取得する「if 0」ロジックでラップできますが、python は実行されません。

if 0: assert isinstance(car, Car)

現在のところ、リスト/タプル/etc に 1 つのタイプのオブジェクトしか含まれておらず、それが何であるかを Wing に伝えることはできませんが、それは彼らの計画に含まれており、同様の構文を使用します。

于 2011-02-28T15:35:07.340 に答える
2

Wing IDE で作業する良い方法は、ブレークポイントを設定して実行することです。これにより、エディター (アクティブなデバッグ スタックにあるコード) とデバッグ プローブでランタイム ソースの分析を取得できます。これは、 http://wingware.com/wingide/code-intelligenceの最後から 2 番目の「静的およびランタイム分析」スクリーン キャストに示されています。

于 2012-02-09T15:10:28.603 に答える
1

Pythonの動的な性質により、コードを実行せずに、インスタンスがどのタイプであるか、またはインスタンスがどの属性を持っているかを知ることは不可能です。たとえば、Carインスタンスはインスタンス化されるまで属性を持たないため、IDEがインスタンスでnameあることを何らかの形で知っていたとしても、静的にどの属性を持つかを理解するのは時間の悪魔になります。carCar

IDEによって異なりますが、一部のIDE(Pythonに付属のIDLEなど)では、スクリプトを実行した後の方が良い結果が得られます。ただし、この場合はおそらくそうではありません。

于 2011-02-28T15:16:22.613 に答える
1

IDE は enumerate から返される型を認識しないため、その状況ではオートコンプリートを実行できません。carsまた、リストに が含まれていることも認識しませんCar

于 2011-02-28T15:12:53.043 に答える