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