Dostaję dyktando do inicjowania osoby z klasy. jest jedno pole osobiście: "imię". Pole "nazwa" jest opcjonalne, co oznacza, że jeśli dict nie ma pozycji "nazwa", to nie ma wartości "nazwisko" osoby. Używam metod getter, aby uzyskać atrybut instancji, ale spowoduje to błąd, jeśli nie ma wartości "name". Nie wiem, czy istnieje dobry styl programowania, aby ulepszyć mój kod? Ponieważ python tworzy pole instancji w czasie wykonywania, nie wiem jak używać gettera takiego jak java.python: błąd atrybutu instancji
class Person:
def __init__(self,person_dict):
try:
self.name = person_dict['name']
except Exception:
pass
def getName(self):
return self.name
pdict = {}
p = Person(pdict)
print p.getName()
AttributeError: instancja osoba nie ma atrybutu 'name'
Jak już widzieliście w odpowiedziach, gettery nie są "pythonic", ani dobry kod Pythona. [Tutaj] (http://tomayko.com/writings/getters-setters-fuxors) to świetny artykuł na temat tego, dlaczego tak jest. Aby podsumować artykuł: Java zawsze potrzebuje modułów pobierających/ustawiających, ponieważ bez nich refaktoryzacja ich użycia jest trudna. W pythonie nie zmieniasz interfejsu, ponieważ możesz użyć [właściwości] (http://docs.python.org/library/functions.html#property). – Darthfett