python 2.7中的继承

Bay*_*tch 1 python oop inheritance python-2.7

我正在尝试构建一个用于解析非常特定的文本结构的框架.我正在处理的结构很丰富,并且具有已知的模式,类似于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()
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下,为什么打印功能无法正常工作?

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

如果base .__ init(self)看起来像是这样的:

class base(object):
    def __init__(self, text):
Run Code Online (Sandbox Code Playgroud)

我必须将派生类定义为:

class test(base):
    def __init__(self, text):
        base.__init__(self, text)
Run Code Online (Sandbox Code Playgroud)

我希望至少免费获得参数对象referance

unu*_*tbu 6

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

class test(base):
    def __init__(self):
        base.__init__(self)
Run Code Online (Sandbox Code Playgroud)

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

class test(base):
    def __init__(self):
        super(test, self).__init__()
Run Code Online (Sandbox Code Playgroud)

如果base.__init__看起来像

class base(object):
    def __init__(self, text):
Run Code Online (Sandbox Code Playgroud)

test.__init__应该是真的

class test(base):
    def __init__(self, text):
        base.__init__(self, text)
Run Code Online (Sandbox Code Playgroud)

请参阅Guido van Rossum的博客,了解为什么self在Python中是明确的.


PS.PEP8建议将CapWords用于类名.