雖然可以在函數定義內的列表推導式中存取類別變量,但無法在類別定義內的列表推導式中存取它們。這種差異源自於這樣一個事實:類別作用域不會擴展到列表推導式或其他封閉作用域(例如生成器表達式或函數定義)。
相反,列表推導式和其他此類表達式具有自己的本地作用域,從而阻止它們存取在封閉類別作用域中定義的變數。此行為在所有版本的 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中文網其他相關文章!