2015-08-08 71 views
-1

我知道這可能是一個簡單的解決方案。但是,它困擾了我。 我只需要訪問父類的方法,設置一個變量,然後從子類中返回它。修改並返回父類的變量 - Python

class Person(object): 
    some code ... 

    def setAge(self, age): 
     #assumes age is an int greater than 0 
     #sets self's age to age (in years) 
     self.age = age 
    def getAge(self): 
     #assumes that self's age has been set 
     #returns self's current age in years 
     if self.age == None: 
      raise ValueError 
     return self.age 


class Child(Person): 
    code ... 

    def setAge(self, age): 
     Person(self.name).setAge(age) 

    def getAge(self): 
     return Person(self.name).age 

我甚至在setAge方法的父類中拋出了一些打印語句,並給出了正確的值。但是,當我試圖稱它爲孩子時。它給我一個None導致提高ValueError

回答

4

實例變量附加到對象;它們是通過父類還是子類來設置都沒關係。您根本不需要定義Child.setAgeChild.getAge

class Child(Parent): 
    pass 

c = Child() 
c.setAge(5) 
print c.getAge() 

另外,不要測試與None平等;使用

if self.age is None: 
+0

它不能解決問題。我無法更改父類。我明白,因爲我會使用通過將方法傳遞給子類,我可以解決這個問題。但是,對我的代碼進行評分的程序在子類中使用def方法來測試它的正確與否。但是,我非常感謝您的回覆。所以很快。 – CaptObvious

+0

您沒有閱讀chepner的回答。您不需要修改Parent。您只需要在Parent上不存在的Child上定義方法。這是正確的答案。 –

+0

是的,是的。你是對的。我重新測試。我在那裏留下了一些糟糕的代碼,通過我。對不起,有任何問題。但是,謝謝你們兩位。我知道這是一個基石問題。但是,感謝提示:-D – CaptObvious