Python:使用类实例的"value"作为指定类实例属性的值

  • 本文关键字:实例 属性 Python value python
  • 更新时间 :
  • 英文 :


我对Python比较陌生,有一个关于访问类实例属性的问题。

考虑下面的例子

import numpy as np
class TwoDimensionalArray:
def __init__(self, input_array):
self.dimension_one_size = input_array.shape[0]
self.dimension_two_size = input_array.shape[1]
self.value = my_array
# Create an instance of the class TwoDimensionalArray.
numpy_array = np.array([[1, 2, 3], [4, 5, 6]])
example_two_dimensional_array = TwoDimensionalArray(numpy_array)

我的实际代码比这个例子要复杂一些;需要此功能的动机是,我不想在整个代码库中编写numpy_array.shape[0]numpy_array.shape[1],而是维度的名称必须适合手头的业务逻辑。

是否有可能以某种方式修改类TwoDimensionalArray,从而在不必写入a_different_array = example_two_dimensional_array.value(即.访问属性value(的情况下获得输入数组,而是使用简化a_different_array = example_two_dimensional_array,即a_different_array将等于np.array([[1, 2, 3], [4, 5, 6]]),即type(a_different_array) = type(numpy_array) = numpy.ndarray,而不是type(a_different_array) = TwoDimensionalArray

在此处找到解决方案:https://numpy.org/doc/stable/user/basics.subclassing.html#simple-向ndarray添加额外属性的示例。

实现这一点的正确方法如下

class TwoDimensionalArray(np.ndarray):
def __new__(cls, input_array):
obj = np.asarray(input_array).view(cls)
obj.dimension_one_size = input_array.shape[0]
obj.dimension_two_size = input_array.shape[1]
return obj
def __array_finalize__(self, obj):
if obj is None: return
self.dimension_one_size = getattr(obj, 'dimension_one_size', None)
self.dimension_two_size = getattr(obj, 'dimension_two_size', None)        

numpy_array = np.array([[1, 2, 3], [4, 5, 6]])
example_two_dimensional_array = TwoDimensionalArray(numpy_array)

我们现在为np.ndarray添加了两个附加属性:example_two_dimensional_array.dimension_one_size = 2example_two_dimensional_array.dimension_two_size = 3

最新更新