Ich bin neugierig auf eine der Empfehlungen in der Google Python style guide concerning properties.Google Style Guide Eigenschaften für Getter und Setter
Darin geben sie das folgende Beispiel:
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
Ich habe zwei Fragen dazu:
Was ist der Nutzen der Verwendung der drei Unterstrich „Umweg“ ist
___get_area
und___set_area
als genau wie zwei Unterstriche, anstatt nur die beiden Unterstriche direkt zu verwenden?mit diesem Satz von Doppel- und Dreifachstrich Methoden, Warum eher
property()
als Methode verwenden, als wie etwas zu tun:@property def area(self): return self.side ** 2 @area.setter def area(self, value): self.side = math.sqrt(value)
Danke! Also, wenn ich Sie richtig verstehe, würden Sie empfehlen, das zu tun, was ich in meiner Frage # 2 gesagt habe (zB @property und @ area.setter), und dann Unterklassen mit Ihrer Methode in RichtigSubclassedSquare? – mindvirus
@mdkess: absolut; Der Style Guide wurde fast sicher für eine ältere Python-Version geschrieben. –