我希望为Python类中的方法构建相当详细的注释。这些注释将用于故障排除、文档、用户界面的工具提示等。但是,尚不清楚如何将这些注释与函数关联起来。
就上下文而言,这是一个功能工程类,因此两个示例方法可能是:
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)
例如:
- 最好能很容易地说出每个工程功能中使用了哪些核心功能
- 跟踪每种方法的任意元数据会很好
- 最好嵌入非字符串数据作为每个函数的元数据。对样本数据帧的一些示例计算
到目前为止,我一直在手动创建文档字符串,如:
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)
然后,我使用regex通过检查__doc__
属性来获取有关函数的数据。然而,有没有比__doc__
更好的地方可以存储有关函数的信息?在上面的例子中,解析Depends on
列表是相当容易的,但在我的用例中,以某种方式将一些示例数据嵌入为数据帧是很好的(我认为在文档字符串中将它们写为markdown会很困难(。
有什么想法吗?
我最终编写了一个类,如下所示:
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)
按照我的代码编写方式,我可以这样做:
sd = ScubbaDiver()
foo(sd)
sd.columns
并且CCD_ 4包含CCD_ 5 访问的所有列
尽管这可能在你的代码库中不起作用。
我还写了这个装饰器:
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 _
您可以按如下方式使用它:
@add_note({'Units':'J', 'Relativity':False})
def create_feature_kinetic_energy(self):
return 0.5* self.data['mass'] * self.data['velocity'].pow(2)
然后你可以做:
create_feature_kinetic_energy.notes['Units'] # J