我正在创建对象,这些对象在pandas数据框中包含数据,并且还具有许多将数据导入,查询,修改和导出到外部文件的功能。之所以这样做,是因为我希望对象包含我们频繁重复的预定义的复杂熊猫函数。
功能列表增长很多,所以我希望能够以某种方式对这些功能进行分组,以便很好地访问它们
目前我的ID定义为:
class myclass():
def __init__(df):
self.df = df
def f1(self):
print("Hello World")
def f2(self,bar,foo)
return self.df[["bar","foo"]].somefunction()
# many more functions...
def f40():
self.df.rename(...,inplace=True)
我这样使用它:
a = myclass(df)
a.f1()
a.f2(bar,foo)
a.f40()
但是我想按导入函数(i),查询函数(q),操纵函数(m)和输出函数(o)将其分组,以便使正弦形像这样
a = myclass()
a.i.f1()
a.o.f2(bar,foo)
a.m.f40()
实现此目标的最佳方法是什么?
myclass.
时,您只会看到[i,q,m,o],然后选择其中一个myclass.i.
时,您只会看到输入组功能。答案 0 :(得分:2)
一种选择是为每组函数创建一个类,并将它们包括在您的主类中(一种称为class composition的技术):
class InputController:
"""Import functions"""
...
class QueryController:
"""Query functions"""
...
class ManipulationController:
"""Manipulation functions"""
...
class OutputController:
"""Output functions"""
...
def foo(self): print("Hello World")
class MyClass:
def __init__(self):
self.i = InputController()
self.q = QueryController()
self.m = ManipulationController()
self.o = OutputController()
...
>>> MyClass().o.foo()
Hello World!
答案 1 :(得分:0)
我是python的新手,所以这可能是不正确的,但是您可以不使用python作用域吗? -例如:
x = "a"
def outer():
x = "b"
def inner():
x = "c"
print("from inner:", x)
inner()
print("from outer:", x)
outer()
print("globally:", x)
inner: c
outer: b
global: a
因此本质上是将您的i,o和q函数“分组”在外部范围内,并将属于这些组的函数嵌套在内部范围内。
可能是错误的,只是一个主意:)