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_data
StringMethods
而不是整个Series
对象,从而避免引用循环。