2017-06-24 82 views
0

Pylint告訴我,我在__init__之外設置了_age,這在風格上並不好,我明白了原因。但是,如果我使用屬性來確保我的屬性在特定時間間隔內設置,那麼在屬性設置器中設置屬性的確是有意義的。我如何調和這兩個相反的想法?存在屬性時,__init__之外的屬性

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

如果你使用的是getters/setters,那麼在你的init裏你應該做'self._age = age' – idjaw

+0

'self.age = age'應該是'self._age = age ' –

+0

您應該考慮接受答案,如果它幫助解決您的問題,以幫助將它標記爲*有用*爲未來的讀者。如果沒有,請澄清爲什麼解決方案不起作用。 – idjaw

回答

3

你是不是真的正確實現getter/setter方法。你應該在你的初始化做實際上是設置self._age = age

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

輸出:

ValueError: You are either too old or too young 

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

隨着該修正,現在根據你的設計預期的東西會工作

沒有例外:

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

輸出:22