Python Can';t在方法重载中打印出子类变量

Python Can';t在方法重载中打印出子类变量,python,Python,我是Python的新手,所以如果这个问题对你来说很简单,请耐心听我说 有人能解释一下为什么Dog类中的类变量name会在下面的示例中导致错误吗?对我来说,d.name可以被调用是没有意义的,但是d.eat()不适合方法重载。非常感谢您的帮助 class Animal: # parent class name = 'Animal' def eat(self): print "Animal eating" class Dog(Animal):

我是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 !

由于
name
是类成员变量,而不是全局或局部变量,因此它需要
运算符来查找它。请尝试以下方法之一:

    print self.name
    print Dog.name

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

由于
name
是类成员变量,而不是全局或局部变量,因此它需要
运算符进行查找。请尝试以下方法之一:

    print self.name
    print Dog.name

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

出现错误的原因是无法在该范围内使用变量名定义方法。如果执行此操作,则不会出现以下错误:

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!

出现错误的原因是无法在该范围内使用变量名定义方法。如果执行此操作,则不会出现以下错误:

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!

请突出显示这两个
.name
s之间的差异,因为它太大了。@9000-谢谢。请突出显示这两个
.name
s之间的差异,因为它太大了。@9000-谢谢。另请参阅:另请参阅: