gpt4 book ai didi

Python 嵌套类定义导致无休止的递归...我在这里做错了什么?

转载 作者:行者123 更新时间:2023-12-01 05:25:11 25 4
gpt4 key购买 nike

我正在用 Python 编写一个程序,它打开输入文件,进行一些简单的文本解析,然后输出。输入是一个 ASCII 文件,其中包含几个格式相似的文本 block 。因此,我想以此为契机来掌握定义自己的类的窍门。

我有一个父类 pFrame,我想继承 pandas.DataFrame 类的属性。由于我的输入文本文件包含两种相似(但不相同)类型的柱状文本,因此我定义了另外两个类(pFrameApFrameB),每个类都继承父类。目前子类只是初始化一些变量;稍后我可以根据需要为一个、另一个或两个类定义简单的辅助方法。

这是我编写的用于定义这些类的模块的精简版本:

import pandas as pd

class pFrame(pd.DataFrame):
pass

class pFrameA(pFrame):
def __init__(self):
self.units = ('msec', 'psi')
self.numFormat = (int, float)
self._gcHeaderStr = " Time Cell"


class pFrameB(pFrame):
def __init__(self):
self.units = ('in', 'in')
self.numFormat = (float, float)
self._gcHeaderStr = "Disp 1 Disp 2"

但是当我尝试测试这些类定义时,Python 进入了无限递归循环:

>>> import pFrameModule
>>> p=pFrameModule.pFrameA()

...
...
if name in self.columns:
File "properties.pyx", line 55, in pandas.lib.AxisProperty.__get__ (pandas/lib.c:29248)
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 2085, in __getattr__
if name in self.columns:
File "properties.pyx", line 55, in pandas.lib.AxisProperty.__get__ (pandas/lib.c:29248)
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 2085, in __getattr__
if name in self.columns:
File "properties.pyx", line 55, in pandas.lib.AxisProperty.__get__ (pandas/lib.c:29248)
RuntimeError: maximum recursion depth exceeded

有人可以给我一个快速指导,以了解我缺少什么吗?

最佳答案

将您的代码修改为以下内容似乎可以修复该问题:

import pandas as pd

class pFrame(pd.DataFrame):
def __init__(self):
super(pFrame, self).__init__()

class pFrameA(pFrame):
def __init__(self):
super(pFrameA, self).__init__()
self.units = ('msec', 'psi')
self.numFormat = (int, float)
self._gcHeaderStr = " Time Cell"


class pFrameB(pFrame):
def __init__(self):
super(pFrameB, self).__init__()
self.units = ('in', 'in')
self.numFormat = (float, float)
self._gcHeaderStr = "Disp 1 Disp 2"


p = pFrameA()
print p._gcHeaderStr # To prove something is happening

我怀疑,由于忽略了每个构造函数中对 super 的调用,您没有正确初始化 DataFrame 类,导致它在幕后崩溃。

关于Python 嵌套类定义导致无休止的递归...我在这里做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com