2015-08-08 106 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