English 中文(简体)
使用“财产”时:辅助功能和发电机
原标题:When to use "property" builtin: auxiliary functions and generators

最近,我发现了<propertyBuilding-in,其中掩饰阶级方法的接收器和制片人为一类财产。 我现在想以我确信不合适的方式加以利用。

使用<代码>property 关键词显然是,如果类别<代码>A有财产<代码>_x,就应当做些什么。 你们想要限制哪些可允许的价值;即,它将取代<条码>、和<条码>X()的施工,可在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上是ok吗?

    @property
    def vertices(self):
        for v in self._new_v_thing:
            yield v.calculate_equivalent_vertex()
最佳回答
  • 当你有正常的属性、获得和(或)确定,对某类使用者来说是有意义的,直接暴露了属性。 公众成员在某些语言中感到厌恶的一个大原因是,如果你需要做一些更复杂的事,那么你就需要改变APIC;在Zahur,你只能界定财产。

  • 如果你使用某种东西,你就应当抽象地把获取财产归为己有。 如果你想让外部国家(地块或网站或东西方)了解这一变化,或者如果你把一些直接使用成员的图书馆包起来,那么,财产可能是行之道。

  • 如果是某物,就不使之成为一种财产。 方法的制定没有任何损害,而且可能有利:如果你需要的话,你可以绕过某种约束性方法,在不作修改的情况下添加关键词。

    很难想象,我会把发电机作为财产。 找到同样情况正常的属性的唯一途径,将需要相当复杂的很多,这样,情况就很难令人信服。

  • 您指出,您可以使用<条码>property,限制查阅某些内部属性:<条码>。 这可能是真实的,但铭记这一点。

    • 如果你将做像安全投入或重要的东西,那么选择优于默示<>。 在谈到这些事情时,你不希望像守则那样做,因为那时,你就坐在法典中。

    • 有时人们使用<条码>property来实施只读的属性。 人们通常更有理由有正常的属性,认识到你可以阻止用户做些 d和没有支持的事情。

  • 引人注意:

    • property isn t a keyword; it s a normal name you can rebind. This is sort of interesting since property isn t a syntax thing or anything: it s a normal class you could implement yourself in pure Python. It uses the same mechanism that makes methods work in Python—descriptors.

    • 您描述的是<条码>property, 即“类别方法的获得者和设定者”,而实际情况是这样。 <编码>property 仅履行正常职能,实际需要量在您的班次中界定;<>编码>property将通过<代码>自封>。 职务实际上不会变成方法,直到你看上去为止,当沙尔制造方法物体时。 在班级定义期间,他们只是职能。 当你有正常方法时,它称为“无形方法”;在“灰色”方法中,指的是,其他特殊物品,在特性认定时改变情况。

问题回答

房地产的使用明显受到限制:t不接受任何论点,它永远不会这样做。

因此,你们必须确信,你将财产转变为财产的职能永远不会被重新定性为一种功能,例如,有额外的违约论点。





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...