Próbowałem użyć właściwości zamiast konkretnych ustawiaczy i pobierających w mojej aplikacji. Wydają się być bardziej pythonic i ogólnie sprawiają, że mój kod jest bardziej czytelny.Zastanawiam się, czy powinienem po prostu zwolnić za pomocą właściwości w python
Bardziej czytelny z wyjątkiem jednego numeru: Literówki.
rozważyć następujący prosty przykład (uwaga, moi właściwości faktycznie niektóre przetwarzania chociaż przykłady tutaj wystarczy ustawić lub powrót prostą zmienną)
class GotNoClass(object):
def __init__(self):
object.__init__(self)
self.__a = None
def __set_a(self, a):
self.__a = a
def __get_a(self):
return self.__a
paramName = property(__get_a, __set_a)
if __name__ == "__main__":
classy = GotNoClass()
classy.paramName = 100
print classy.paramName
classy.paranName = 200
print classy.paramName
#oops! Typo above! as seen by this line:
print classy.paranName
wyjściu jak każdy, kto czyta trochę ściśle zobaczy , to:
100
100
200
Ups. Nie powinno to być wyjątkiem tego, że zrobiłem literówkę - napisałem paranName (dwa n-ki) zamiast paramName.
To jest łatwe do debugowania w tym prostym przykładzie, ale szkodziło mi to w moim większym projekcie. Ponieważ pyton z radością tworzy nową zmienną, gdy przypadkowo zamierzam użyć właściwości, dostaję subtelne błędy w moim kodzie. Błędy, które czasami trudno mi wytropić. Co gorsza, raz użyłem tej samej literówki (raz, gdy ustawiałem, a później raz, gdy otrzymywałem), więc mój kod wydawał się działać, ale dużo później, kiedy inna gałąź kodu próbowała wreszcie uzyskać dostęp do tej właściwości (poprawnie) Dostałem niewłaściwą wartość - ale zajęło mi to kilka dni, zanim zdałem sobie sprawę, że moje wyniki są trochę za niskie.
Teraz, kiedy wiem, że to jest problem, spędzam więcej czasu na baczniejszej lekturze mojego kodu, ale najlepiej byłbym w stanie złapać tę sytuację automatycznie - jeśli tęsknię za jednym z nich, mogę wprowadzić błąd, który nie pojawiają się, aż upłynie sporo czasu ...
Zastanawiam się, czy powinienem zmienić stare dobre setery i gettery? Czy jest jakiś fajny sposób na uniknięcie tej sytuacji? Czy ludzie po prostu polegają na sobie, aby złapać te błędy ręcznie? Niestety, nie jestem profesjonalnym programistą, po prostu ktoś, kto próbuje coś tu zrobić w pracy i tak naprawdę nie wiem, jak najlepiej to podejść.
Dzięki.
P.S. Rozumiem, że jest to także jedna z zalet Pythona i nie narzekam na to. Zastanawiam się tylko, czy lepiej byłoby używać programów ustawiających i pobierających.
To samo dzieje się w przypadku prostych atrybutów, nie wspominając o zmiennych lokalnych. Jest to bezpośredni efekt uboczny projektowania języka i próba "naprawienia" generalnie spowoduje większe problemy. Jednak nigdy nie uważałem tego za poważny problem. –
Jest to absolutnie prawdziwe i po tym, jak napisałem, myślałem o tym trochę więcej. Myślę, że powodem, dla którego dzieje się to bardziej, jest to, że teraz tak bardzo polegam na właściwościach (w porównaniu z moimi dawnymi ustawiaczami i pozyskującymi), a więc bardziej prawdopodobne jest wystąpienie takiego błędu. Sztuką będzie po prostu zminimalizować problem tak bardzo, jak to możliwe i być bardziej ostrożnym. – Ben