2016-12-06 74 views
0

試圖找到一些關於如何在類和子類中使用集合和字典的信息。我有一項任務,指示我們創建一個類Country和一個子類CountryCatalogue。然後,在函數中創建一個名爲cDictionarycatalogue的字典(可以是列表,集合或字典,我決定使用set,但可能需要根據您的建議進行更改)。我遇到的問題是,當我初始化cDictionarycatalogueclass CountryCatalogue(Country):下它告訴我沒有的功能,在它之下(例如,__init__()findCountry()addCountry(),等等)可以「看見」 catalogue被初始化,並給我一個當我嘗試訪問這些列表中的catalogue時出現「無效變量」錯誤,如果我在__init__函數中初始化它們,則會發生同樣的情況;其他功能不能看到它,但至少__init__正常工作。類函數中的集合和字典

不幸的是,類的糟糕和我們被教了所有單獨的重要「主題」的蟒蛇,但沒有如何一起使用它們。

實施例:

class CountryCatalogue(Country): 
def __init__(self, filename = "", name = "", pop = 0, area = 0, continent = ""): 
    cDictionary = {}    #Initializing the cDictionary and catalogue here leads to errors in other functions 
    catalogue = [] 
    super().__init__(name = "",pop = 0,area = 0,continent = "") 
    fillcdict = open("continent.txt")  #not really important for the problem 
    linescdict = fillcdict.readlines()[1:] 
    for line in linescdict: 
     entries1 = line.split(",") 
     country = str(entries1[0]) 
     continentwrong = str(entries1[1]) 
     entries2 = continentwrong.split ("\n") 
     continent = str(entries2[0]) 
     cDictionary["keywords"] = country 
     cDictionary["values"] = continent 
    self._continent = continent 
    fillcatdict = open(filename) 
    linescatalogue = fillcatdict.readlines()[1:] 
    for line in linescatalogue: 
     entries = line.split("|") 
     countrydata = str(entries[0]) 
     populationdata = entries[1] 
     areadata = entries[2] 
     catalogue.append(countrydata) 

def findCountry(self):  #So, when I try and use catalogue in this function I get a 'unresolved reference' note in Pycharm and a "invalid variable' error if I run the problem 
    findcountinp = input("Please enter a country name: ") 
    if findcountinp in catalogue: 
     return self._name+"|"+self._continent+"|"+self._area+"|"+self._population 
    else: 
     return "Country not found!" 

回答

0

catalogue = []__init__(self, ...)僅內部的方法,其壽命結束時,方法返回創建一個局部變量是可見的。請使用self.catalogue = [],然後在使用它時將其稱爲self.catalogue。這將使catalogue成爲對象的成員,而不是局部變量。

+0

我該如何從目錄中刪除東西? 目錄將是一個單獨的數據文件中提供的所有國家的列表。在另一個功能中,我沒有在問題中包含,我必須要求用戶輸入一個國家,然後搜索目錄並刪除他們輸入的國家。 – MezyMinzy

+0

'self.catalogue.pop(index)'或'self.catalogue.remove(country)'。你的設計是可疑的。你確實意識到將CountryCatalogue作爲Country的子類是沒有意義的,對嗎?一組國家又是一個國家呢?或者,如果每個「國家」都創建爲「國家目錄」,則每個國家/地區的成員列表「目錄」將會不同。您將擁有與國家一樣多的目錄。 –

+0

那麼,國家的其中一項功能是setPopulationDensity,您可以在其中計算人口密度。但是,在CountryCatalogue中,您有一個函數filterCountriesByPopDensity,它指示:「請求用戶輸入人口密度範圍的下限和上限,然後查找所有人口密度在該範圍內的國家。」無處不在計算人口密度,它表明人口密度已經計算出來(我從國家班級中假設),但我不知道如何從一個班級獲得功能並在另一個班級中使用 – MezyMinzy