Python类继承中缺少方法?

2024-06-01 02:10:25 发布

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

我对类继承不是很有经验。请帮我看看下面的代码:

class Handle(STAFHandle):

    def __init__(self, HandleName):
        handle = STAFHandle.__init__(self, HandleName)
        self.initLogger(handle)

    def initLogger(self, handle):
        self.logger = Logging(handle, 'Test')

handle = Handle('test')
handle.logger.info('test')

它说没有定义提交方法:

result = handle.submit(system, service, logRequest) 
AttributeError: 'NoneType' object has no attribute 'submit'

但如果我把它改成:

^{pr2}$

它起作用了。为什么会有区别?谢谢!!在

干杯, 哲


Tags: 代码testselfinitloggingdef经验logger
1条回答
网友
1楼 · 发布于 2024-06-01 02:10:25

STAFHandle.__init__返回None。你可能想要:

class Handle(STAFHandle):
    def __init__(self, handle_name):
        super(Handle, self).__init__(handle_name)
        self.initLogger()

    def initLogger(self):
        self.logger = Logging(self, 'Test')

handle = Handle('test')

请记住,__init__方法将对象作为其第一个参数,并修改该对象。因此,当您调用super(Handle, self).__init__(handleName)时,您正在更改self的属性,而不是返回一个新对象。两个例子的不同之处在于,对initLogger的两个调用中的变量handle引用了不同的东西。在

请注意,我已经用一个super代理替换了显式的STAFHandle.__init__调用;这在本例中是等效的,但是允许更大的灵活性,因为现在可以在不破坏__init__的情况下更改类的继承。在

我还将HandleName改为{},以符合Python惯例(CamelCase指的是类)。在

相关问题 更多 >