当前位置: 代码迷 >> python >> python对象属性是否可以返回一个函数
  详细解决方案

python对象属性是否可以返回一个函数

热度:27   发布时间:2023-07-16 10:30:21.0

有没有办法设置Python对象属性object.attribute来返回函数或getter方法?

例如:

class CrossSection():
    def __init__(self):
        self.data = pd.Series([1,3,5,np.nan,6,8])

现在构建一个Panel()对象,我希望有一个属性Panel.data,每次都从底层的CrossSection对象返回数据(最好不要复制数据):

class Panel():
    def __init__(self):
        # - Core Object - #
        self.xs = dict()
        self.xs[1] = CrossSection()
        self.xs[2] = CrossSection()

        # - Data Object - #
        self.data = self.find_data()

    def find_data(self):
        self.data = dict()
        for n in self.xs.keys():
            self.data[n] = self.xs[n].data
        return self.data

在上面的示例中,有两个问题:

  1. find_data()方法仅在__init__上运行,但如果任何底层CrossSections()发生更改(或在__init__之后加载),则self.data将不代表底层的CrossSection()对象。
  2. self.data构造一个新的字典。

但它确实模仿了我想要的行为:

p = Panel()
p.data

    {1: 0     1
1     3
2     5
3   NaN
4     6
5     8
dtype: float64,
 2: 0     1
1     3
2     5
3   NaN
4     6
5     8
dtype: float64}

因此,

  1. 有没有办法可以请求Panel.data ,以便它根据CrossSection()对象的基础self.xs字典进行CrossSection()
  2. Panel.data可以在底层的CrossSection()对象上返回一个函数吗? [或者我是使用类方法进行交互的唯一选择?]

有没有办法设置Python对象属性object.attribute来返回函数或getter方法?

这是的典型用例

Panel.data可以在底层的CrossSection()对象上返回一个函数吗?

您是否明确存储了CrossSection()对象的列表?