2017-01-16 8 views
0

Так что моя проблема в том, если у меня есть классыНаследование класса объекта после назначения Python

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

Покажите нам код, где '' '... это не сработало ...' '' и Traceback если есть один .. – 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