python2.7中的继承

2024-09-29 10:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个框架来解析一个非常具体的文本结构。 我正在处理的结构非常丰富,并且有一个已知的模式,类似于xml。 我正试图构建一个框架来进行解析。文本有不同的部分,我预计将来会添加更多的节代码。作为补偿,我尝试构建一系列派生类,这些类可以根据需要进行交换。在

我以为一切都按计划进行,直到我开始编写第一个派生类。 基类在__init__中有一些功能,我希望在所有具体的派生类中免费获得这些功能。然而,事实似乎并非如此。在

下面是一个简单的例子来说明我的问题: 我希望输出是:

['memberA', 'memberB', 'memberC'], ['DerivedA', 'DerivedB', 'DerivedC']

class base(object):
    def __init__(self):
        members = [attr for attr in dir(self) if not callable(attr) and not attr.startswith("__")]
        print members

class test(base):
    def __init__(self):
        self.memberA = None
        self.memberB = None
        self.memberC = None


class test2(test):
    def __init__(self):
        self.DerivedA = None
        self.DerivedB = None
        self.DerivedC = None

t = test()
t2 = test2()

有人能给我解释一下,为什么打印功能不能像我期望的那样工作?在

编辑: 根据以下答案:我现在有一个问题:

如果是base,那该怎么办呢?\uu init(self)看起来像:

^{pr2}$

是否必须将派生类定义为:

class test(base):
    def __init__(self, text):
        base.__init__(self, text)

我希望至少可以免费获得参数对象引用


Tags: test文本self功能框架nonebaseinit
2条回答

您正在重写test2中的init

将在中完成初始化测试。因此init函数中不再有print int。在

def __init__(self):
    self.DerivedA = None
    self.DerivedB = None
    self.DerivedC = None

在Python中,必须在test.__init__内显式调用基类的__init__

class test(base):
    def __init__(self):
        base.__init__(self)

或者,如果您希望支持多重继承,请使用super

^{pr2}$

如果base.__init__看起来像

class base(object):
    def __init__(self, text):

那么test.__init__应该是

class test(base):
    def __init__(self, text):
        base.__init__(self, text)

关于why ^{} is explicit in Python,请参阅Guido van Rossum的博客。在


PS.PEP8建议对类名使用CapWords。在

相关问题 更多 >