如何实现对象的嵌套属性,如 pandas series.str.find()



Pandas有一个简洁的功能,其中方法几乎被赋予了一个命名空间,例如

import pandas as pd
s = pd.Series("Hi there Stack Overflow!".split())
print(s.str.len())
# 0    2
# 1    5
# 2    5
# 3    9
# dtype: int64

在这里,您可以看到str方法(如len(收集在str命名空间下。

我有一个实现很多方法的对象。我想将它们与属性访问权限分组,如上所示。最简单的方法是什么?

如果您可以使用下面的模板制作一个虚拟示例,该示例仅通过调用Series.str.print_attribute()打印attribute,这可能是展示其工作原理的最简单方法。

class Series():
attribute = 42
str = ???
def __init__(self):
???
???

Pandas 定义了一个定义这些方法的StringMethods类。然后,它只是将Series对象传递给创建引用循环的构造函数:

class StringMethods:
def __init__(self, series):
self.series = series
def len(self):
# compute length on self.series
return result

class Series:
def __init__(values):
# init internal data
self.str = StringMethods(self)

根据实现的不同,您可以简单地将引用转发给_internal_dataStringMethods而不是整个Series对象,从而避免引用循环。

最新更新