我有以下代码:
class Fish():
def __init__(self, color, size):
self.color = color
self.size = size
def getInfo(self):
return self.size, self.color
class Catch():
def func1(self):
catFish = Fish('blue', 'big')
return catFish
if __name__ == '__main__':
bob=Catch()
bob.func1()
catFish.getInfo()
当我尝试catFish.getInfo()时,我收到以下错误
Traceback (most recent call last):
File "test4.py", line 58, in <module>
catFish.getInfo()
NameError: name 'catFish' is not defined
我假设这是因为当方法func1结束时,局部变量catFish被转储。有没有办法在方法中实例化一个对象,并且能够在方法结束后访问该对象?
答案 0 :(得分:3)
我假设这是因为当方法func1结束时,局部变量catFish被转储。
是的,你的假设是正确的。
或者确切地说,一旦方法结束,名称 catFish
就会超出范围。这意味着名称catFish
无法再访问基础对象,但对象仍然位于内存中的某个位置。您可以通过返回方法并为其提供其他名称来使其可用于方法之外的代码。
在此代码示例中,您确实从catFish
方法返回以前称为func1()
的对象,但您没有为其指定新名称。要做到这一点,你只需要写
new_name = bob.func1()
然后您可以访问在方法中称为catFish
的同一对象,现在称为new_name
。
通常,您可能希望阅读有关variable scoping的内容,以了解您可以使用任何特定名称访问对象的位置以及名称不再有效的时间。
答案 1 :(得分:0)
变量catFish超出范围意味着它在方法中定义,因此该方法之外的任何代码都无法访问它。