如果未将变量传递给函数,如何访问 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正确