Python Can';t在方法重载中打印出子类变量
我是Python的新手,所以如果这个问题对你来说很简单,请耐心听我说 有人能解释一下为什么Dog类中的类变量name会在下面的示例中导致错误吗?对我来说,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):
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-谢谢。另请参阅:另请参阅: