虽然可以在函数定义内的列表推导式中访问类变量,但无法在类定义内的列表推导式中访问它们。这种差异源于这样一个事实:类作用域不会扩展到列表推导式或其他封闭作用域(例如生成器表达式或函数定义)。
相反,列表推导式和其他此类表达式具有自己的本地作用域,从而阻止它们访问在封闭类作用域中定义的变量。此行为在所有版本的 Python 中都是一致的。
要访问类定义中列表推导式中的类变量,您可以使用以下解决方法之一:
考虑以下示例:
class Foo: x = 5 # Error in Python 3: 'NameError: name 'x' is not defined' y = [x for i in range(1)]
在此示例中使用类变量 x ,您可以使用以下解决方法之一:
使用显式函数:
def get_y(x): return [x for i in range(1)] y = get_y(x)
使用 __init__ 创建实例变量:
def __init__(self): self.y = [self.x for i in range(1)]
尽管有上述解决方法,通常建议避免从类定义中的列表推导式访问类变量。这种做法可能会导致混乱和潜在的错误,尤其是在与其他开发人员协作时。
为了获得更清晰、更可维护的方法,请考虑使用函数或实例变量而不是列表推导式来访问类定义中的类变量。
以上是为什么我无法在 Python 的类定义内的列表推导式中直接访问类变量?的详细内容。更多信息请关注PHP中文网其他相关文章!