如果属性当前为空,如何使Python对象预计算属性?

如果属性当前为空,如何使Python对象预计算属性?,python,oop,properties,Python,Oop,Properties,我正在编写一个Python对象来存储一些数据。我希望与对象关联的一个数据必须以随机方式计算(这是一种“空模型”)。因此,我希望函数执行以下操作: 如果尚未预先计算属性,请计算并存储该属性 如果属性已预先计算,请从内存中读取,而不是从计算中读取 下面是一个非常非常简单的玩具示例,说明了我正在努力实现的目标。假设我有一个叫做object的对象。它目前的设置如下: from random import random class Object(object): def __init__(

我正在编写一个Python对象来存储一些数据。我希望与对象关联的一个数据必须以随机方式计算(这是一种“空模型”)。因此,我希望函数执行以下操作:

  • 如果尚未预先计算属性,请计算并存储该属性
  • 如果属性已预先计算,请从内存中读取,而不是从计算中读取
下面是一个非常非常简单的玩具示例,说明了我正在努力实现的目标。假设我有一个叫做object的对象。它目前的设置如下:

from random import random

class Object(object):

    def __init__(self):
        self._x = None

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self):
        self._x = random() # Assume that this is the stochastic thing to compute.
我想实现的是:

>> O = Object()
>> print O.x
<result of computation printed here, rather than "None">
>O=Object()
>>打印O.x

这可能吗?如果是,我将如何实现这一点?如果没有,我编写代码的最佳方式是什么?

如果没有,请让getter初始化
\ux

from random import random

class Object(object):

    def __init__(self):
        self._x = None

    @property
    def x(self):
        if self._x is None:
            self._x = random()
        return self._x

只要让你的getter初始化
\ux
,如果它是
None

from random import random

class Object(object):

    def __init__(self):
        self._x = None

    @property
    def x(self):
        if self._x is None:
            self._x = random()
        return self._x

只要让你的getter初始化
\ux
,如果它是
None

from random import random

class Object(object):

    def __init__(self):
        self._x = None

    @property
    def x(self):
        if self._x is None:
            self._x = random()
        return self._x

只要让你的getter初始化
\ux
,如果它是
None

from random import random

class Object(object):

    def __init__(self):
        self._x = None

    @property
    def x(self):
        if self._x is None:
            self._x = random()
        return self._x

当前未正确定义由
@x.setter
修饰的函数。它应该是客户端试图设置的值:
defx(self,new\ux):self.\ux=new\ux
。虽然还不清楚您是否真的希望客户端能够直接设置
x
。由
@x.setter
修饰的函数目前没有正确定义。它应该是客户端试图设置的值:
defx(self,new\ux):self.\ux=new\ux
。虽然还不清楚您是否真的希望客户端能够直接设置
x
。由
@x.setter
修饰的函数目前没有正确定义。它应该是客户端试图设置的值:
defx(self,new\ux):self.\ux=new\ux
。虽然还不清楚您是否真的希望客户端能够直接设置
x
。由
@x.setter
修饰的函数目前没有正确定义。它应该是客户端试图设置的值:
defx(self,new\ux):self.\ux=new\ux
。虽然还不清楚您是否真的希望您的客户能够直接设置
x
,或者甚至可以设置
self.\ux=random(),如果self.\ux不是其他self.\ux
。。。我觉得稍微凉快一点。。。但本质上是一样的:P+1@JoranBeasley-是的,当然要酷得多,但实际的随机计算大约是20行,:p.甚至是
self.\ux=random(),如果self.\ux不是其他self.\ux
。。。我觉得稍微凉快一点。。。但本质上是一样的:P+1@JoranBeasley-是的,当然要酷得多,但实际的随机计算大约是20行,:p.甚至是
self.\ux=random(),如果self.\ux不是其他self.\ux
。。。我觉得稍微凉快一点。。。但本质上是一样的:P+1@JoranBeasley-是的,当然要酷得多,但实际的随机计算大约是20行,:p.甚至是
self.\ux=random(),如果self.\ux不是其他self.\ux
。。。我觉得稍微凉快一点。。。但本质上是一样的:P+1@JoranBeasley-是的,当然要酷得多,但实际的随机计算大约是20行,:p。