Python 如何使函数在函数外部使用变量,但在类的方法中使用变量

Python 如何使函数在函数外部使用变量,但在类的方法中使用变量,python,function,class,variables,global,Python,Function,Class,Variables,Global,我正在尝试创建一个能够从函数外部访问变量的函数。但是,这个变量需要在类中定义。为了清晰起见,我将在代码中定义一个简化的函数 class Stuff(): def __init__(self): print("Initialized") def forward(self,x): y=4 x=func(x) return x def func(x): global y return x+y

我正在尝试创建一个能够从函数外部访问变量的函数。但是,这个变量需要在类中定义。为了清晰起见,我将在代码中定义一个简化的函数

class Stuff():
     def __init__(self):
         print("Initialized")

     def forward(self,x):
         y=4
         x=func(x)
         return x



def func(x):
   global y
   return x+y

stuff = Stuff()
print(stuff.forward(4))
因此,我试图让funcx使用forward方法中定义的y,但是当我运行这段代码时,我得到一个错误:全局名称y未定义。非常感谢您的帮助

你不能。成员变量属于类的特定实例。您必须知道要执行此操作的实例,因此最好也将y传递给函数


你可以做相反的事情。在forward函数中使用global定义全局y变量,然后从func访问该变量。然而,不要这样做。这是个坏习惯,总是这样。将y传递给func。

生成funcx,y并用y变量调用它。global语句用于声明一个名称在改变它的函数中是“非本地”的。你把它放错地方了。然而,你真正应该做的是把y作为参数传递给func。为什么你认为你首先需要一个全局的?换句话说:任何没有绑定到赋值的名称都是一种绑定形式,它已经是一个闭包或全局的。y在func中不绑定到,因此它是一个全局名称。y=4将y向前绑定,使其自动成为本地。全局y改变了那里的范围,因为它在那里才是重要的。@MartijnPieters我应该删除这个问题,因为答案似乎在另一篇文章中?这与成员变量无关。这在Python中不是一个概念。b如果你说的是实例属性,那么这里就不涉及self.y。这只是另一个当地人。这里的方法与常规函数没有什么不同。换句话说:你可以做OP想要做的事情,但OP不应该做。我如何在方法中定义全局变量?顺便说一句,我知道我的要求听起来很愚蠢,但我需要它来编写一个更大的程序。@RohanSingh:只要把全局y放在y=4之前就行了。global关键字的意思是:当我引用y时,如果它存在,使用全局的,或者如果它不存在,则创建它t@RohanSingh:ok,无论是在函数中还是在方法中,创建全局变量都是相同的