【问题标题】:Python: Initializing class inside source code causes NameErrorPython:在源代码中初始化类会导致 NameError
【发布时间】:2018-04-24 06:23:02
【问题描述】:

我是一个 Python 新手,还在学习绳索

初始化 GroupBy(_GroupBy) 导致我的代码给出一个 NameError: name '_get_grouper' 未定义

class GroupBy(_GroupBy):
    def _add_numeric_operations(cls):        
        cls.first = GroupBy(_GroupBy).nth(-1, dropna=False)

_get_grouper 在 _GroupBy 的初始化中被调用

class _GroupBy(PandasObject, SelectionMixin):
    def __init__(self, obj, keys=None, axis=0, level=None,
        grouper=None, exclusions=None, selection=None, as_index=True,
        sort=True, group_keys=True, squeeze=False, **kwargs):
        if grouper is None:

            grouper, exclusions, obj = _get_grouper(obj, keys,
                                                    axis=axis,
                                                    level=level,
                                                    sort=sort,
                                                  mutated=self.mutated)

class Grouper(object):
    def _get_grouper(self, obj, validate=True):
        self._set_grouper(obj)
        self.grouper, exclusions, self.obj = _get_grouper(self.obj, [self.key],
                                                      axis=self.axis,
                                                      level=self.level,
                                                      sort=self.sort,
                                                      validate=validate)
        return self.binner, self.grouper, self.obj

如果我在 python 命令行中调用它,则第 n 个方法会起作用,但在源代码中初始化它的类会引发此错误。我错过了什么?

【问题讨论】:

  • 为什么Grouper._get_grouper 应该在_GroupBy 中可见?

标签: python nameerror


【解决方案1】:

您调用了_get_grouper() 本身和__init___GroupBy

首先,您最好删除该递归调用。 一般来说,你可以做另一个实现来代替递归调用

_GroupBy 类的__init__ 中,将_get_grouper() 替换为Grouper._get_grouper(),以明确哪个类具有_get_grouper()

这些可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2019-11-24
    • 2012-05-05
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多