无法在方法重载中打印出子类变量

时间:2017-01-30 17:11:24

标签: python

我是Python的新手,所以如果问题对你来说非常简单,请耐心等待。

有人可以解释为什么Dog类中的类变量name会导致以下示例中的错误吗?对我来说d.name可以调用是没有意义的,但d.eat()不适合方法重载。非常感谢您的帮助!

class Animal:          # parent class
    name = 'Animal' 
    def eat(self):
        print "Animal eating"
class Dog(Animal):     # child class
    name = 'Dog' 
    def eat(self):  
        print name

d = Dog()
print d.name  # OK
d.eat()       # Error !

2 个答案:

答案 0 :(得分:3)

由于name是一个类成员变量,而不是全局变量或局部变量,因此需要.运算符来查找它。尝试其中之一:

    print self.name
    print Dog.name

您使用哪一个将取决于您的程序设计的其他方面。第一个将尝试在当前对象中查找name,如果需要,则返回到类定义。第二个将始终使用类定义。

答案 1 :(得分:0)

出错的原因是您无法在该范围内使用变量名定义方法。如果你这样做,那你就不会有错误:

class Animal:          # parent class
    name = 'Animal'
    def eat(self):
        print "Animal eating"
class Dog(Animal):     # child class
    name = 'Dog'
    def eat(self):
        # name does not exist within this scope
        print self.name
d = Dog()
print d.name  # OK
d.eat()       # No longer an error!