-1

リストが空かどうかを確認する方法についていくつかの回答を見てきましたが、必要なものが正確に見つかりませんでした。まもなく-Pythonで、リストがいっぱいかどうかを確認してから空にする方法が必要ですが、リストを埋めた直後にチェックを開始する必要があります。

クラスを呼び出してリストを定義しています-Packet()

class Packet(object):
"""description of class"""
    def __init__(self):
        self.newPacket = []
newPacket = Packet()

メニューがあります。オプションの 1 つは、クラス内の関数を呼び出してリストを埋めることです。ただし、関数が再度選択された場合は、インスタンスを空にして、新しいインスタンスを開始する必要があります。私はそれをやろうとしました:

if newPacket:
    del newPacket
newPacket.MakePacket()

しかし、これでは関数を呼び出してリストを開始できません..無効にすると

if newPacket:
    del newPacket

機能は問題なく動作します。

4

2 に答える 2

1

Packetあなたが作成して名前を付けた特定のインスタンスをnewPacket、その同じ名前の属性と混同しているようです。インスタンスを削除したり、リストを削除したりするのではなく、リストを空にしたいようです。2 つの異なるものに同じ名前を付けたため、問題のリストはコマンドラインから としてアクセスできるようになりましたnewPacket.newPacket(ただし、オブジェクト自体は独自のメソッドで として参照するのが好きですself.newPacket)。

そう。すると、現在のワークスペースからdel newPacketオブジェクトへの参照が削除されます。その変数が現在のワークスペースに存在しなくなったため、 -など、そのシンボルで何かをしようとするとnewPacket、インタープリターは aを発生させます。NameErrornewPacket.MakePacket()

Packetlist 属性のアイテムをカウントするメソッドを実装するself.newPacketか、それを空にする場合は、次のように言えます。

class Packet(object):

    # ...

    def count( self ):
        return len( self.newPacket )

    def clear( self ):
        del self.newPacket[:]

これは、空になったリストへの参照を保持しながら、リストを空にする 1 つの方法を偶発的に示しています。 del myList[:]

于 2016-01-05T21:52:00.733 に答える