Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以从_uinit_uu.py扩展类_Python_Pandas_Python Import_Class Extensions - Fatal编程技术网

Python 是否可以从_uinit_uu.py扩展类

Python 是否可以从_uinit_uu.py扩展类,python,pandas,python-import,class-extensions,Python,Pandas,Python Import,Class Extensions,我已经编写了一个小型python包,它使用一些附加方法扩展了pandas数据框架 目前,我的软件包中有以下代码: def init(): @pd.api.extensions.register_dataframe_accessor("test") class _: def __init__(self, pandas_obj): self._obj = pandas_obj def myMethod(self):

我已经编写了一个小型python包,它使用一些附加方法扩展了pandas数据框架

目前,我的软件包中有以下代码:

def init():
    @pd.api.extensions.register_dataframe_accessor("test")
    class _:
        def __init__(self, pandas_obj):
            self._obj = pandas_obj

        def myMethod(self):
            pass
然后,我在python中执行以下操作:

import pandas as pd
import mypackage as mp
mp.init()
test = pd.Dataframe(<define data frame>)
test.mp.myMethod()
将熊猫作为pd导入
将mypackage作为mp导入
mp.init()
test=pd.Dataframe()
test.mp.myMethod()

我的问题是,是否可以从mypackage中的
\uuuu init\uuuu.py
中导入并注册访问者,以便导入mypackage后,我可以自动访问mymethod,而无需执行init()步骤?我目前的方法有点笨拙…

我可能在你的问题中遗漏了一些东西,但我认为你可能找错了方向。在这方面,
\uuuu init\uuuuuuuuuupy
没有什么特别之处——您在
\uuuu init\uuuuuuuuuuuupy
中编写的任何内容都会在导入包时执行,因此我认为您根本不需要
init()
函数。如果您有一个包含以下内容的文件:

# mypackage/__init__.py
import pandas as pd


@pd.api.extensions.register_dataframe_accessor("test")
class _:
    def __init__(self, pandas_obj):
        self._obj = pandas_obj

    def myMethod(self):
        print(self._obj)
现在,您只需导入
mypackage
即可使用它,如:

>>> import pandas as pd
>>> import mypackage
>>> df = pd.DataFrame({'a': [1, 2, 3]})
>>> df.test.myMethod()
   a
0  1
1  2
2  3
另一方面,您可能明确希望使用类似于
init()函数的函数的一个原因是最不奇怪的原则:因为
register\u dataframe\u accessor
为所有用户(包括其他库)修改
dataframe
实例的命名空间如果您的
register\u dataframe\u访问器
,仅通过导入您的包,可能会覆盖其他包的dataframe访问器(如果它们恰好共享相同的名称)


如果名称是合理唯一的,那么这可能不是问题。根据使用方法的不同,这对您的软件包来说也可能不是问题。

您可以在
\uuuu init\uuuuuuuuuuy.py
中执行任何必要的操作来初始化软件包。