You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Polars API扩展置于专用模块后,如何从目标模块导入?

问题

我按照Polars的规范扩展了其API,将注册代码放在extensions.py文件中:

import polars as pl

@pl.api.register_expr_namespace("greetings")
class Greetings:
    def __init__(self, expr: pl.Expr):
        self._expr = expr

    def hello(self) -> pl.Expr:
        return (pl.lit("Hello ") + self._expr).alias("hi there")

    def goodbye(self) -> pl.Expr:
        return (pl.lit("Sayōnara ") + self._expr).alias("bye")

现在需要在另一个模块target.py中使用这个扩展的greetings命名空间,确保以下代码能正常调用扩展方法:

import polars as pl

pl.DataFrame(data=["world", "world!", "world!!"]).select(
    [
        pl.all().greetings.hello(),
        pl.all().greetings.goodbye(),
    ]
)

请问该如何在target.py中导入扩展模块?

解决方案

要让greetings命名空间生效,只需在target.py中导入extensions模块即可,有几种常用方式:

方式1:直接导入整个扩展模块

在target.py的开头添加导入语句,触发模块初始化时的命名空间注册:

import polars as pl
import extensions  # 导入后,装饰器会自动注册greetings命名空间

方式2:从扩展模块导入任意成员

即使你不需要直接使用导入的成员,只要触发模块加载,就能完成注册:

import polars as pl
from extensions import Greetings  # 导入类,同样会执行模块内的注册逻辑

或者使用通配符导入(不推荐但有效):

import polars as pl
from extensions import *

关键注意点

  • 确保extensions.py与target.py在同一目录,或位于Python可搜索的路径中(若不在同一目录,可通过修改sys.path或使用相对导入解决)。
  • 导入操作必须在调用greetings命名空间方法之前执行,建议放在文件开头。

内容的提问来源于stack exchange,提问作者Andi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:05:08