我很好奇Google Python style guide concerning properties中的推薦之一。谷歌風格指南屬性獲取和設置器
在這裏面,他們給了下面的例子:
class Square(object):
"""A square with two properties: a writable area and a read-only perimeter.
To use:
>>> sq = Square(3)
>>> sq.area
9
>>> sq.perimeter
12
>>> sq.area = 16
>>> sq.side
4
>>> sq.perimeter
16
"""
def __init__(self, side):
self.side = side
def __get_area(self):
"""Calculates the 'area' property."""
return self.side ** 2
def ___get_area(self):
"""Indirect accessor for 'area' property."""
return self.__get_area()
def __set_area(self, area):
"""Sets the 'area' property."""
self.side = math.sqrt(area)
def ___set_area(self, area):
"""Indirect setter for 'area' property."""
self.__set_area(area)
area = property(___get_area, ___set_area,
doc="""Gets or sets the area of the square.""")
@property
def perimeter(self):
return self.side * 4
我對這個兩個問題:
什麼是用三個下劃線「間接」
___get_area
和___set_area
作爲受益以及兩個下劃線,直接使用兩個下劃線的直接?爲什麼使用
property()
的方法與這套雙重和三重底線方法,而不是做這樣的事情:@property def area(self): return self.side ** 2 @area.setter def area(self, value): self.side = math.sqrt(value)
謝謝!那麼,如果我正確地理解了你,你會推薦我在第二個問題(即@property和@ area.setter)中說的話,然後在ProperlySubclassedSquare中使用你的方法進行子類化? – mindvirus
@mdkess:絕對;風格指南幾乎肯定是爲較舊的Python版本編寫的。 –