Weźmy następujący kod:"zmienna lokalna przywoływana przed przypisaniem" - tylko funkcje?
import something
def Foo():
something = something.SomeClass()
return something
... to widocznie nie prawidłowy kod:
UnboundLocalError: local variable 'something' referenced before assignment
... jako zmiennej lokalnej something
jest tworzony, ale nie przypisano przed RHS z =
jest oceniany . (Zobacz na przykład: this related answer's comment.) Wydaje mi się to nieco dziwne, ale na pewno pójdę z tym. Dlaczego jest następujący prawidłowy kod?
class Foo(object):
something = something.SomeClass()
Moje zrozumienie było to, że wewnątrz class
definicji był zasadniczo zakres:
apartament klasy jest następnie wykonywany w nowej ramce wykonania (patrz sekcja nazewnictwa i wiążące), stosując nowo utworzona lokalna przestrzeń nazw i oryginalna globalna przestrzeń nazw.
A więc dlaczego ten kod działa inaczej niż funkcja?
"coś" wydaje się mieć więcej niż jedno znaczenie? – Johnsyweb
@Johnsyweb: Tak, trochę. Ale w obu przypadkach ma to samo znaczenie więcej niż jedno. (A przynajmniej wszystkie dokumenty, które przeczytałem, wydają się tak mówić.) – Thanatos