2014-04-15 59 views
0

我目前使用由我的教授開發的語言編寫源代碼到源代碼編譯器。它一切順利,但一些語言特質讓我發瘋。源語言有1個索引列表和不同的分片規則,Python使用(非常清晰)0索引列表。用自定義的替換Python列表/設置實現

有沒有什麼辦法可以替代Python使用的列表實現?以下給出我想要的想法。

class MyList(list): 
    # My implementation of 1-indexed lists 
    pass 

x = ["foo", "bar", "baz"] 
y = MyList(["foo", "bar", "baz"]) 

assert type(x) == type(y) # Should work 
assert x[1] == "foo" # Should work 

我想使用的語法糖蟒蛇給我的列表,而不是處理產生它在我自己的。我知道我通常不會以真正的代碼來做這件事,但除了我目前的需求之外,我還想知道一個不錯而優雅的解決方案。我想想要弄清列表的元類,或者在運行時改變其功能。有沒有什麼辦法可以做到這一點,並從列表中擴展仍然MyList,因爲它在其引擎下使用列表方法?

回答

0

你可以在一個類中包裝一個列表並實施特殊的container-related method names,如__len____getitem__。這裏有一個想法,你可能會實現:

class MyList(object): 

    def __init__(self): 
    self._data = list() 

    def __getitem__(self, index): 
    return self._data[index+1] 

    def __len__(self): 
    return len(self._data) 
+0

我已經做了MyList。我希望Python列表語法返回一個MyList,而不是一個列表。 – reindeer

+0

@reindeer這是不可能的AFAIK ...: - \ – jrennie