Python - 从另一个类方法访问列表

时间:2017-05-20 10:52:39

标签: python class methods static

我有两个不同的类和同一个类的两个方法有点问题。我有一个B级,它正在使用a类中的两种方法,这似乎工作得很好。 然而问题是类a(插入)中的第一个方法更改了一个列表,该类应该使用该类中的第二个方法(查找)。它使用的全局列表仍然只用零启动。所以我不知道如何告诉方法使用插入方法中的HashMap:/我希望有人可以提供帮助,谢谢!

""" PUBLIC MEMBERS

Insert the given key (given as a string) with the given value (given as 
an integer). If the hash table already contains an entry for the given key, 
update the value of this entry with the given value.
"""

class Map:
    global m 
    m = 10000
    global HashMap 
    HashMap = []
    for i in range(m):
        HashMap.append(0)

    @classmethod
    def insert(self, key, value):

        """
        >>> Map.insert("hi", 9)
        [4,53]
        """
        self.key = key
        self.value = value


        asci = 0  
        for i in key:
            asci += ord(i)
        hashindex = (asci%m)*2
        print(hashindex)
        print(HashMap[hashindex])

        if HashMap[hashindex] == key:
           HashMap[hashindex + 1] = value 

        else:
            while HashMap[hashindex] != 0:
                hashindex = ((asci+1)%m)*2  


            HashMap[hashindex] = key
            HashMap[hashindex+1] = value



    """ Check if there exists an entry with the given key in the hash table. 
   If such an entry exists, return its associated integer value. 
   Otherwise return -1.
    """

    @classmethod
    def lookup(self, key):

        self.key = key
        ascilookup = 0
        for i in key:
            ascilookup += ord(i)

        indexlookup = (ascilookup%m)*2


        for j in HashMap:
            if HashMap[j]==key:
                return HashMap[j + 1]

            elif HashMap[j]==0:
                return "-1"

            else:
                j =((j+1)%m)*2        



if __name__ == "__main__":
    import doctest
    doctest.testmod()   

1 个答案:

答案 0 :(得分:0)

这是python中地图的简单实现:

mark

编辑而不使用字典,使用两个列表更容易:

class Map:
    HashMap = {}

    def __init__(self,leng):
        for i in range(leng):
            self.HashMap[str(i)]=0

    def insert(self, key, value):
        self.HashMap[key]=value


    def lookup(self, key):
        for each in self.HashMap.iterkeys():
            if each == key:
                return self.HashMap[each]
        return None