2017-06-24 1 views
0

Pylint sagt mir, dass ich _age außerhalb __init__, die nicht stilvoll stilistisch ist und ich sehe warum. Wenn ich jedoch Eigenschaften verwende, um sicherzustellen, dass meine Attribute innerhalb eines bestimmten Intervalls gesetzt werden, dann ist es sinnvoll, die Attribute im Property-Setter festzulegen. Wie versöhne ich diese beiden gegensätzlichen Gedanken?Attribute außerhalb von __init__ in Gegenwart von Eigenschaften

class Person: 
    def __init__(self, age, height, weight): 
     self.age = age 

    @property 
    def age(self): 
     return self._age 

    @age.setter 
    def age(self, age): 
     if 18 <= age <= 81: 
      self._age = age 
     else: 
      raise ValueError('You are either too old or too young') 
+0

Wenn Sie mit Getter/Setter so, dann in Ihrem init Sie tun sollten 'self._age = age' – idjaw

+0

' self.age = age' sein sollte 'self._age = Alter ' –

+0

Sie sollten in Betracht ziehen, die Antwort zu akzeptieren, wenn es half, Ihr Problem zu lösen, um es als * hilfreich * für zukünftige Leser zu markieren. Wenn nicht, erkläre bitte, warum die Lösung nicht funktioniert hat. – idjaw

Antwort

3

Sie sind nicht wirklich richtig die Getter/Setter implementieren. Was sollten Sie in Ihrem init tun setzt tatsächlich self._age = age:

def __init__(self, age, height, weight): 
    self._age = age 

Mit dieser Korrektur, jetzt werden die Dinge nach Ihrem Entwurf wie erwartet:

p = Person(1, 2, 3) 
p.age = 10 

Ausgang:

ValueError: You are either too old or too young 

Keine Ausnahme:

p = Person(1, 20, 3) 
p.age = 22 
age = p.age 
print(age) 
Ausgang 10

: 22

Verwandte Themen