python中的实例变量不太同于java中的局部变量。在学python的时候,关于实例变量的使用,哪些地方可以调用它,弄得我头疼,今天终于有所领悟了;直接上代码:
- 在实例函数中定义实例变量
class Geen:
def __init__(self):
pass
def fly1(self):
self.width = 8
self.height = 9
def fly2(self):
print(self.width)
print(self.height)
c=Geen()
#c.fly1()
c.fly2()
这里会出错:
AttributeError: 'Geen' object has no attribute 'width'
- 在构造函数中定义实例变量的话,其他函数是可以直接调用该实例变量的
但是如果是在构造函数中定义实例变量的话,它又可以了,那就有点纳闷了
class Geen:
def __init__(self):
self.width = 8
self.height = 9
def fly1(self):
pass
def fly2(self):
print(self.width)
print(self.height)
c=Geen()
#c.fly1()
c.fly2()
输出的是:8 9
然后我就误以为只有在构造函数函数中定义的实例变量才可以用,其实我是错的,其实刚刚 1中的代码改下也可以用的:代码见下3:
class Geen:
def __init__(self):
pass
def fly1(self):
self.width = 8
self.height = 9
def fly2(self):
print(self.width)
print(self.height)
c=Geen()
c.fly1()
c.fly2()
输出也是8和9,这就是为什么1不能用的原因,只有你在实例函数中定义实例变量,其他函数调用的时候,要先调用含有定义实例函数先,再调用你的函数就可以了;其实就是个变量初始化问题,1就是程序运行的时候,你没调用实例函数先,程序会看不到的,要先调用才行。为什么在构造函数又可以呢?因为你定义类对象的时候会先调用构造函数。。。我真的是菜啊。记录一下吧,可以讲的有错,请各位大佬纠正!!!