2017-01-16 63 views
0

所以我的問題是,如果我有類類對象的

class Source: 

    def __init__(self): 
     self.srcname = None 
    @property  
    def __name__(self): 
     sources = ['indeed','careerbuilder','glassdoor'] 
     if self.srcname is None: 
      return KeyError("Invalid Source Name. Failed to set srcname") 
     elif self.srcname not in sources: 
      return KeyError("%s - Source invalid") 
     else: 
      return self.srcname 
    @property 
    def header(self): 
     return dict(u=1) 

class Other(Source): 

    def __init__(self): 
     Source.__init__(self) 
     self.srcname = "mysource" 

    def get(self): 
     return self.header 

class Again(Source): 

    def __init__(self): 
     super().__init__() 

    def get(self): 
     return self.srcname 

我想...

print(Other().get()) ## Works 
>>> {"u":1} 
print(Again().get()) ## Failed 

##Traceback (most recent call last): 
## File "~/Desktop/_source.py", line 69, in <module> 
## print(Again().get()) 
## File "~/Desktop/_source.py", line 66, in get 
## return self.srcname 
##AttributeError: 'Again' object has no attribute 'srcname' 

基本上,我希望有一個統一的解析器類將繼承源它已經從另一個班級分配後的名稱。

+0

我們展示的代碼,其中'''...它沒有工作...'''和回溯,如果有一個.. – wwii

+0

感謝您的評論。我剛剛編輯它。希望這是更好的。 –

+0

''Again()。get()'''不會在你發佈的代碼中拋出AttributeError。目前還不清楚你在尋求什麼幫助。也許閱讀http://stackoverflow.com/help/mcve併發佈一個不同的問題。 – wwii

回答

2

取而代之的是:

class Data(Source): 
    def __init__(self): 
     Source.__init__(self) 

保持這樣的:

class Data(Source): 
    def __init__(self): 
     super().__init__(self) 

因爲

super().__init__() 

表示從父類繼承(構造函數)。你可以在super()中提到參數。 init()構造函數。

進一步澄清有關類和繼承是指這個 http://www.python-course.eu/python3_inheritance.php