मैंने हाल ही में पाइथन के property
built-in की खोज की, जो क्लास विधि गेटर्स और सेटर्स को कक्षा की संपत्ति के रूप में छिपाती है। अब मैं इसे इस तरीके से उपयोग करने का लुत्फ उठा रहा हूं कि मुझे पूरा यकीन है कि अनुचित हैं।निर्मित "संपत्ति" का उपयोग कब करें: सहायक कार्यों और जेनरेटर
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()