Я недавно обнаружил встроенную в Python property
, которая маскирует методы получения и установки методов класса как свойство класса. Теперь я испытываю желание использовать его таким образом, что, я уверен, неуместен.
Использование ключевого слова property
, безусловно, правильно, если класс A
имеет свойство _x
, допустимые значения которого вы хотите ограничить; то есть он заменил бы конструкцию getX()
и setX()
, которую можно написать на C ++.
Но где еще уместно сделать функцию свойством? Например, если у вас есть
class Vertex(object):
def __init__(self):
self.x = 0.0
self.y = 1.0
class Polygon(object):
def __init__(self, list_of_vertices):
self.vertices = list_of_vertices
def get_vertex_positions(self):
return zip( *( (v.x,v.y) for v in self.vertices ) )
уместно добавить
vertex_positions = property( get_vertex_positions )
Можно ли когда-нибудь сделать генератор похожим на собственность? Представьте себе, если изменение в нашем коде означает, что мы больше не храним Polygon.vertices
таким же образом. Тогда можно было бы добавить это к Polygon
?
@property
def vertices(self):
for v in self._new_v_thing:
yield v.calculate_equivalent_vertex()