Ich bin sehr neu in der Programmierung und fing an, Python zu lernen. Könnte eine sehr dumme Frage sein, bitte verzeihen Sie meine Unwissenheit. Betrachten Sie das folgende Code-Snippet:Python-Klasse-Attribute verstehen
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
ich verstehen will, was der Unterschied ist foo und bar zwischen der Verwendung von (WRT, wo wir sie haben definiert) nach Umfang weise sie an allen Orten gleichermaßen zugänglich sind im Vergleich zu jeder andere und einzige Unterschied ist, dass man innerhalb der Funktion ist und andere innerhalb der Klasse, aber beide sind immer noch "Instanz" Variable. Also was ist eine gute Übung?
Auch, wenn ich etwas wie unten Anzeigefunktion ändern:
def display(self,foo):
self.foo=foo
foo = foo
print "self.foo : ",self.foo
print "foo : ",foo
Kann jemand bitte erklären, wie Python dies sieht, wie in welchem Unterschied/Bedeutung dieses self
Schlüsselwort bringt zwischen zwei foo
.
Nein, 'bar' ist * nicht * eine Instanzvariable. Die beiden sind sehr unterschiedlich, weshalb es nicht um "gute Praxis" geht. Es geht darum, was für Ihre Situation angemessen ist, weil sie verschiedenen Zwecken dienen. – phant0m
Auch 'self.bar' funktioniert, weil der Name' bar' zuerst im Namespace der Instanz und dann in der Klasse gesucht wird. Die Tatsache, dass "self.bar" funktioniert, bedeutet nicht immer, dass "bar" eine Instanzvariable ist. – ersran9