【发布时间】:2011-02-15 12:47:53
【问题描述】:
我最近发现了 Python 的 property built-in,它将类方法 getter 和 setter 伪装成类的属性。我现在很想以我很确定不合适的方式使用它。
如果类A 有一个属性_x 你想限制它的允许值,那么使用property 关键字显然是正确的做法;即,它将取代人们可能用 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()
【问题讨论】:
标签: python properties