首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将元数据或注释与python函数或方法关联?

如何将元数据或注释与python函数或方法关联?
EN

Stack Overflow用户
提问于 2021-11-29 00:22:54
回答 1查看 128关注 0票数 1

我希望为Python类中的方法构建相当详细的注释。这些将用于用户中间阶段的故障排除、文档、工具提示等。然而,我不清楚如何将这些注释与函数保持关联。

对于上下文,这是一个功能工程类,因此两个示例方法可能是:

代码语言:javascript
复制
def create_feature_momentum(self):
    return self.data['mass'] * self.data['velocity'] * 

def create_feature_kinetic_energy(self):
    return 0.5* self.data['mass'] * self.data['velocity'].pow(2)

例如:

  1. 很好地告诉每个工程特性中使用了哪些核心特性,
  2. 跟踪每种方法的任意元数据(
  3. ),最好将非字符串数据作为关于每个函数的元数据。例如:样本数据的一些实例计算.

到目前为止,我一直在手动创建文档字符串,如:

代码语言:javascript
复制
def create_feature_kinetic_energy(self)->pd.Series:
    '''Calculate the non-relativistic kinetic energy.

    Depends on: ['mass', 'velocity']
    Supports NaN Values: False
    Unit: Energy (J)

    Example: 
        self.data= pd.DataFrame({'mass':[0,1,2], 'velocity':[0,1,2]})
        self.create_feature_kinetic_energy()
        >>> pd.Series([0, 0.5, 4])

    '''
    return 0.5* self.data['mass'] * self.data['velocity'].pow(2)

然后,通过检查__doc__属性,使用regex获取有关函数的数据。但是,有比__doc__更好的地方可以存储有关函数的信息吗?在上面的示例中,解析Depends on列表相当容易,但在我的用例中,最好也以某种方式嵌入一些示例数据作为数据(我认为在docstring中将它们写为减价是很困难的)。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-06 09:23:52

最后,我写了一个课程,如下所示:

代码语言:javascript
复制
class ScubaDiver(pd.DataFrame):
    accessed = None

    def __getitem__(self, key):
        if self.accessed is None:
            self.accessed = set()
        self.accessed.add(key)
        return pd.Series(dtype=float)

    @property
    def columns(self):
        return list(self.accessed)

以编写代码的方式,我可以这样做:

代码语言:javascript
复制
sd = ScubbaDiver()

foo(sd)

sd.columns

sd.columns包含foo访问的所有列。

尽管这在您的代码库中可能不起作用。

我还写了这个装潢师:

代码语言:javascript
复制
def add_note(notes: dict):
    '''Adds k:v pairs to a .notes attribute.'''
    def _(f):
        if not hasattr(f, 'notes'):
            f.notes = {}
        f.notes |= notes  # Summation for dicts
        return f
    return _

您可以使用它如下:

代码语言:javascript
复制
@add_note({'Units':'J', 'Relativity':False})
def create_feature_kinetic_energy(self):
    return 0.5* self.data['mass'] * self.data['velocity'].pow(2)

然后你就可以:

代码语言:javascript
复制
create_feature_kinetic_energy.notes['Units']  # J
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70148604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档