Tak, w opublikowanym oryginalnym przykładzie właściwość będzie działać dokładnie tak samo, jak po prostu posiadanie zmiennej instancji „x”.
To najlepsza rzecz we właściwościach Pythona. Z zewnątrz działają dokładnie jak zmienne instancji! Co pozwala na użycie zmiennych instancji spoza klasy.
Oznacza to, że Twój pierwszy przykład może faktycznie używać zmiennej instancji. Jeśli coś się zmieniło, a następnie zdecydujesz się zmienić implementację, a właściwość jest przydatna, interfejs tej właściwości będzie nadal taki sam z kodu spoza klasy. Zmiana ze zmiennej instancji na właściwość nie ma wpływu na kod poza klasą.
Wiele innych języków i kursów programowania instruuje programistę, aby nigdy nie ujawniał zmiennych instancji i zamiast tego używał „pobierających” i „ustawiających” dla dowolnej wartości, do której można uzyskać dostęp spoza klasy, nawet w przypadku prostego przypadku, jak podano w pytaniu.
Kod poza klasą z wykorzystaniem wielu języków (np. Java)
object.get_i()
#and
object.set_i(value)
#in place of (with python)
object.i
#and
object.i = value
Podczas implementacji klasy istnieje wiele funkcji pobierających i ustawiających, które działają dokładnie tak, jak w pierwszym przykładzie: replikują zmienną o prostej instancji. Te metody pobierające i ustawiające są wymagane, ponieważ jeśli implementacja klasy ulegnie zmianie, cały kod poza klasą będzie musiał ulec zmianie. Ale właściwości Pythona pozwalają, aby kod poza klasą był taki sam, jak w przypadku zmiennych instancji. Dlatego kod poza klasą nie musi być zmieniany, jeśli dodajesz właściwość lub masz prostą zmienną instancji. Tak więc w przeciwieństwie do większości języków Object Oriented, dla prostego przykładu ty może użyć instancji zmiennej zamiast „pochłaniacze” i „ustawiaczy”, które nie są naprawdę potrzebne, bezpieczne, wiedząc, że jeśli zmieni się na nieruchomości w przyszłości, kod za pomocą twoja klasa nie musi się zmieniać.
Oznacza to, że potrzebujesz tworzyć właściwości tylko wtedy, gdy występuje złożone zachowanie, a w bardzo powszechnym prostym przypadku, w którym, jak opisano w pytaniu, wystarczy prosta zmienna instancji, możesz po prostu użyć zmiennej instancji.