1

multitest.py と skiplist.py の 2 つのファイルがあります。編集できないスターター コードとして skiplist.py が与えられます。

multitest.py は、skiplist.py から関数を作成して借用することになっているファイルです。

skiplist.py ファイルには、次のようなメソッドがあります。

class SkipList(object):
    def __len__(self):
        """(SkipList) -> int
        Return the number of items in this skip list.
        """
        return self.size

multitest.py では、独自のlenメソッドを作成する必要がありますが、ビルトインへのアクセスは許可されていません。

from skiplist import *
class MultiSet(object):
    def __len__(self):
        """(MultiSet) -> int
        Return the number of items in this multiset.
        """
        return SkipList.__len__(self)

実行時

s = MultiSet([])
print(len(s))

エラーが発生します

Traceback (most recent call last):
File "/Applications/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 134, in <module>
File "/Applications/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 56, in __len__
File "/Users/Borna/Documents/CSC148/Assignment/skiplist.py", line 39, in __len__
return self.size
builtins.AttributeError: 'MultiSet' object has no attribute 'size'
4

1 に答える 1

4

まあ、あなたMultiSetはから継承していないSkipListので、それ自体のメソッドを呼び出すべきではありませんSkipList。この場合、ご覧のとおり、SkipListには.size属性がありますが、MultiSetありません。

これを修正するには、MultiSetextend SkipList( ) を作成するか、メソッドを直接使用せずclass MultiSet(SkipList)に実装する必要があります (たとえば、 のインスタンスを含み、そのインスタンスのサイズを返すことによって)。MultiSet.__len__SkipListMultiSetSkipList

于 2013-02-13T19:44:32.520 に答える