Jestem bardzo nowy w programowaniu i zacząłem uczyć się Pythona. Może wyglądać bardzo głupio, więc proszę, wybacz mi moją ignorancję. Rozważmy następujący fragment kodu:Opis atrybutów klasy Python
class Test1:
bar = 10
def display(self,foo):
self.foo=foo
print "foo : ",self.foo #80
def display1(self):
print "bar: ", self.bar #10
print "again foo: ", self.foo #80
if __name__ == '__main__':
test1 = Test1()
test1.display(80)
test1.display1()
print test1.bar #10
print test1.foo #80
Chcę zrozumieć, jaka jest różnica między używaniem foo i bar (wrt do miejsca, gdzie zostały one zdefiniowane), jak w zakresie mądry są jednakowo dostępne we wszystkich miejscach, w porównaniu do nawzajem i jedyną różnicą jest to, że jedna znajduje się wewnątrz funkcji, a druga w klasie, ale obie nadal są zmiennymi "instancji". Więc co jest dobrą praktyką?
Ponadto, jeśli nieco zmodyfikować funkcję jak poniżej wyświetlacza:
def display(self,foo):
self.foo=foo
foo = foo
print "self.foo : ",self.foo
print "foo : ",foo
Może ktoś proszę wyjaśnić, jak pyton widzi to, co za różnica jak w/znaczeniu tego słowa kluczowego self
przynosi między dwoma foo
.
Nie, 'bar' to * nie * jest zmienną instancji. Oba są bardzo różne, dlatego nie chodzi o "dobrą praktykę". Chodzi o to, co jest odpowiednie dla twojej sytuacji, ponieważ służą one różnym celom. – phant0m
Również 'self.bar' działa, ponieważ nazwa' bar' jest najpierw przeszukiwana w przestrzeni nazw instancji, a następnie w klasie. Fakt, że 'self.bar' działa, nie zawsze oznacza, że' bar' jest zmienną instancji. – ersran9