2015-01-28 11 views
10

Zastanawiam się, czy istnieje sposób użycia Pycharm do automatycznego generowania gettera (@property) lub ustawiacza dla wszystkich moich zmiennych w klasie.Autopeneracja Pycharm (@property) i (@ x.setter)

Jeśli istnieje sposób, czy ktoś może to wskazać?


dziękuję! Właściwie zamierzałem automatycznie wygenerować (@property) i (@ x.setter).

+6

Jeśli tak, nie powinno być. Powinieneś używać tylko modułów pobierających i ustawiających, kiedy faktycznie ich potrzebujesz. –

+2

W python nie trzeba używać getters i setters, aby zachować bezpieczeństwo API. – bgusach

+0

Dlaczego po prostu nie zrobić urywka? –

Odpowiedz

9

Nie ma sposobu, aby to zrobić. Możesz wyodrębnić pewne części kodu, ale nie możesz mieć pycharmu generującego dla ciebie gettery i setery. Nie ma również potrzeby, ponieważ wszystkie zmienne są publiczne, a wartości _var, nawet jeśli są traktowane jako zmienne prywatne, również mogą zostać zmienione.

EDIT (zmiana pytanie):

Jeśli chcesz pisać mniej kodu podczas dokonywania pobierające i ustawiające, następnie wystarczy użyć lub propsd fragment w pycharm props.

+0

nadal można ukryć niektóre zmienne za pomocą Obj .__ x, prawda? –

+0

Możesz ukryć atrybut z wiodącym '__', ale nie możesz zabezpieczyć dostępu do niego. Po prostu użyj jednego (!) Wiodącego podkreślenia, jeśli chcesz wyjaśnić, że atrybut jest przeznaczony tylko do użytku wewnętrznego. – Matthias

+0

@Matthias To o co mi chodzi, zawsze możesz uzyskać dostęp do rzeczy w Pythonie. Wszystko jest publiczne. –

3

Nie ma takiej potrzeby. Punktem pobierające i ustawiające jest

  • ograniczenie dostępu (jak robienie czegoś tylko do odczytu)
  • utrzymywanie API (tak, że można zmienić pola leżące lub dodać niektóre przetwarzania).

Pierwszy nie może zostać osiągnięty w Pythonie, a drugi może być bez użycia gettera i setera wszędzie.

Jeśli miał

class Person(object): 

    def ___init__(self, full_name): 
     self.full_name = full_name 

i zdecydowała się name i surname zamiast, można następnie dodać

@property 
    def full_name(self): 
     return self.name + " " + self.surname 

    @full_name.setter 
    def full_name(self, value): 
     self.name, self.surname = value.split() 

bez rozbijania API.

+3

Nie odpowiada na pytanie. –

+1

"Jak się zabić?" "Nie" "Nie odpowiada na pytanie" Technicznie masz rację. –

+0

Cześć, dlaczego nie można osiągnąć pierwszego. Myślę, że nadal możesz używać Obj .__ x, aby ukryć zmienną, prawda? –