如果未将变量传递给函数,如何访问 class 函数之外的变量
How to access a variable outside of a class function if it wasn't passed to the function
我的任务是修改我们 Python 类.
中的一个函数的行为
我们的函数有几个参数,一个是调试标志。目前,如果未指定调试标志,则我们假定它为 False。我们需要它做的是当未指定调试时,检查调用代码中的变量“debug”并使用该值(如果存在)。
我会简单地更改函数声明中调试参数的名称,除了我们有很多使用该标志的遗留代码。
这是在 Jupyter Lab 中,如果它有任何不同的话。
示例代码:
class MyClass:
@classmethod
def fn(self, debug=None):
if debug is None:
try:
debug = parent.debug
except Exception as e:
print(e)
debug = "BAD"
return debug
debug = True
x = myClass
print( x.fn() )
我希望输出为“真”,但结果是:
global name 'parent' is not defined
BAD
我想做的事情可行吗?如果是,怎么做?
您访问了代码中未定义的变量 parent。
改用globals()['debug']
。
或者将您的 fn() 方法替换为:
@classmethod
def fn(self, debug=None):
if debug is None:
debug = globals().get('debug', 'BAD')
return debug
首先,您代码中的 MyClass 没有继承自任何其他 class。从技术上讲,class 没有任何父对象(默认情况下 obj class 除外),因此无法访问 'parent.debug' 等不存在的内容。其次,关于你的问题,我假设你想访问在 class 之外初始化的调试变量,那么你可以通过这样的事情轻松地做到这一点:
global debug
class MyClass:
@classmethod
def fn(self, debug=None):
if debug is None:
try:
debug = debugOut
except Exception as e:
print(e)
debug = "BAD"
return debug
debugOut = True
x = MyClass()
print(x.fn())
以上代码returns正确
我的任务是修改我们 Python 类.
中的一个函数的行为我们的函数有几个参数,一个是调试标志。目前,如果未指定调试标志,则我们假定它为 False。我们需要它做的是当未指定调试时,检查调用代码中的变量“debug”并使用该值(如果存在)。
我会简单地更改函数声明中调试参数的名称,除了我们有很多使用该标志的遗留代码。
这是在 Jupyter Lab 中,如果它有任何不同的话。
示例代码:
class MyClass:
@classmethod
def fn(self, debug=None):
if debug is None:
try:
debug = parent.debug
except Exception as e:
print(e)
debug = "BAD"
return debug
debug = True
x = myClass
print( x.fn() )
我希望输出为“真”,但结果是:
global name 'parent' is not defined
BAD
我想做的事情可行吗?如果是,怎么做?
您访问了代码中未定义的变量 parent。
改用globals()['debug']
。
或者将您的 fn() 方法替换为:
@classmethod
def fn(self, debug=None):
if debug is None:
debug = globals().get('debug', 'BAD')
return debug
首先,您代码中的 MyClass 没有继承自任何其他 class。从技术上讲,class 没有任何父对象(默认情况下 obj class 除外),因此无法访问 'parent.debug' 等不存在的内容。其次,关于你的问题,我假设你想访问在 class 之外初始化的调试变量,那么你可以通过这样的事情轻松地做到这一点:
global debug
class MyClass:
@classmethod
def fn(self, debug=None):
if debug is None:
try:
debug = debugOut
except Exception as e:
print(e)
debug = "BAD"
return debug
debugOut = True
x = MyClass()
print(x.fn())
以上代码returns正确