我最近發現Python的property
built-in,它將類方法getter和setter僞裝成類的屬性。我現在正在試圖以我非常確定不合適的方式使用它。何時使用「property」內建函數:輔助函數和生成器
使用property
關鍵字顯然是正確的做法,如果A
類的屬性_x
的允許值要限制;即它將取代可能用C++編寫的getX()
和setX()
結構。
但是還有什麼地方可以讓函數成爲一個屬性?舉例來說,如果你有
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()