将对象内的相似功能分组

时间:2019-05-22 15:25:13

标签: python

我正在创建对象,这些对象在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()

实现此目标的最佳方法是什么?

编辑:

  • 我添加了self参数和数据框,因此更加清晰
  • @chepner我想这也可以。我只是觉得对它们进行分组会很好,因此,当您开始输入myclass.时,您只会看到[i,q,m,o],然后选择其中一个myclass.i.时,您只会看到输入组功能。

2 个答案:

答案 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函数“分组”在外部范围内,并将属于这些组的函数嵌套在内部范围内。

可能是错误的,只是一个主意:)

相关问题