Python-在类本身中创建共享类变量
我对Python很陌生,我一直面临一个问题,在stackoverflow上找不到直接的答案(但我想我只是没有足够的经验在google上搜索正确的术语)。我希望您能提供帮助您可以将结果缓存为成员变量(如果我正确理解了问题):Python-在类本身中创建共享类变量,python,Python,我对Python很陌生,我一直面临一个问题,在stackoverflow上找不到直接的答案(但我想我只是没有足够的经验在google上搜索正确的术语)。我希望您能提供帮助您可以将结果缓存为成员变量(如果我正确理解了问题): 您可以将结果缓存为成员变量(如果我正确理解了问题): 当然,你可以这样做: class Data: def __init__(self, data): self.data = data self.dimensions = None
您可以将结果缓存为成员变量(如果我正确理解了问题):
当然,你可以这样做:
class Data:
def __init__(self, data):
self.data = data
self.dimensions = None
def get_dimensions(self):
self.dimensions = (np.shape(self.data) if
self.dimensions is None else
self.dimensions)
return self.dimensions
如果您需要修改self.data
并重新计算self.dimensions
,可以使用关键字参数更好地指定是否要重新计算结果。例:
def get_dimensions(self, calculate=False):
self.dimensions = (np.shape(self.data)
if calculate or self.dimensions is None
else self.dimensions)
return self.dimensions
当然,你可以这样做:
class Data:
def __init__(self, data):
self.data = data
self.dimensions = None
def get_dimensions(self):
self.dimensions = (np.shape(self.data) if
self.dimensions is None else
self.dimensions)
return self.dimensions
如果您需要修改self.data
并重新计算self.dimensions
,可以使用关键字参数更好地指定是否要重新计算结果。例:
def get_dimensions(self, calculate=False):
self.dimensions = (np.shape(self.data)
if calculate or self.dimensions is None
else self.dimensions)
return self.dimensions
数组的形状直接存储在数组中,而不是计算值。阵列的形状必须存储,因为备份内存是平面阵列。因此,
(4,4)
、(2,8)
和(16,)
将具有相同的支持数组。如果不存储形状,数组将无法执行索引操作numpy.shape
仅在获取类似数组的对象(如列表或元组)的形状时才真正有用
我错过了最后一点,您关心的是一些其他大型昂贵的计算,您还没有展示。最好的解决方案是第一次缓存计算值,然后在以后的方法调用中返回缓存值。
应付额外的计算
from random import random
class Data:
@property
def dimensions(self):
# Do a try/except block as the exception will only every be thrown the first
# time. Secondary invocations will work quicker and not require any checking.
try:
return self._dimensions
except AttributeError:
pass
# some complex computation
self._dimensions = random()
return self._dimensions
d = Data()
assert d.dimensions == d.dimensions
数组的形状直接存储在数组中,而不是计算值。阵列的形状必须存储,因为备份内存是平面阵列。因此,
(4,4)
、(2,8)
和(16,)
将具有相同的支持数组。如果不存储形状,数组将无法执行索引操作numpy.shape
仅在获取类似数组的对象(如列表或元组)的形状时才真正有用
我错过了最后一点,您关心的是一些其他大型昂贵的计算,您还没有展示。最好的解决方案是第一次缓存计算值,然后在以后的方法调用中返回缓存值。
应付额外的计算
from random import random
class Data:
@property
def dimensions(self):
# Do a try/except block as the exception will only every be thrown the first
# time. Secondary invocations will work quicker and not require any checking.
try:
return self._dimensions
except AttributeError:
pass
# some complex computation
self._dimensions = random()
return self._dimensions
d = Data()
assert d.dimensions == d.dimensions
如果你的维度没有改变,你可以做得更简单
import numpy as np
class Data:
def __init__(self, data):
self.data = data
self.dimension=np.shape(self.data)
def get_dimensions(self):
return self.dimension
test = Data(np.random.random((20, 15)))
print(test.get_dimensions())
如果你的维度没有改变,你可以做得更简单
import numpy as np
class Data:
def __init__(self, data):
self.data = data
self.dimension=np.shape(self.data)
def get_dimensions(self):
return self.dimension
test = Data(np.random.random((20, 15)))
print(test.get_dimensions())
问题是,你从来没有设置过尺寸,所以你总是重复计算,然后返回,而不是使用以前计算的结果…啊,不知道我能做到@亩無 对的现在解决这个问题。问题是,你从来没有设置过尺寸,所以你总是重复计算然后返回,而不是使用以前计算的结果…啊,不知道我能做到@亩無 对的现在就修好。好的,我明白了。因此,如果我只想返回单个数组的形状,我发现不需要重写上面的语句。然而,在我的get_dimensions函数中,我做的不仅仅是返回形状,所以我真的想避免一直执行额外的步骤,好的,注意点。因此,如果我只想返回单个数组的形状,我发现不需要重写上面的语句。然而,在我的get_dimensions函数中,我做的不仅仅是返回形状,所以我真的希望避免一直执行额外的步骤