作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Python 编写一个程序,它打开输入文件,进行一些简单的文本解析,然后输出。输入是一个 ASCII 文件,其中包含几个格式相似的文本 block 。因此,我想以此为契机来掌握定义自己的类的窍门。
我有一个父类 pFrame
,我想继承 pandas.DataFrame
类的属性。由于我的输入文本文件包含两种相似(但不相同)类型的柱状文本,因此我定义了另外两个类(pFrameA
和 pFrameB
),每个类都继承父类。目前子类只是初始化一些变量;稍后我可以根据需要为一个、另一个或两个类定义简单的辅助方法。
这是我编写的用于定义这些类的模块的精简版本:
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/
我是一名优秀的程序员,十分优秀!