无法访问继承的Python类中的父属性

时间:2018-01-06 17:19:52

标签: python inheritance

这是我的父类,

class BaseResource:
    def __init__(self):
        self.logger = logging.getLogger(__name__)
        fmt = '[%(asctime)s] [%(levelname)s] [%(message)s] [--> %(pathname)s [%(process)d]:]'
        logging.basicConfig(format=fmt, level=logging.DEBUG)

    def log(self, msg):
        self.logger.debug(msg)

这是我继承的对象,

class SendOTP(BaseResource):

    def __init__(self):
        super(BaseResource, self).__init__()

    def on_post(self, req, res):
        self.logger.log("[FAILURE]..unable to read from POST data")

这会引发以下错误,

AttributeError: 'SendOTP' object has no attribute 'logger'

我在这里做错了什么。

3 个答案:

答案 0 :(得分:3)

应该是super(SendOTP, self),而不是super(BaseResource, self)

此外,如果这是Python 3,您可以将其简化为super();如果是Python 2,您还需要将BaseResource的声明更改为

class BaseResource(object):

获得一个新式的课程。

答案 1 :(得分:2)

如果是 python 3 ,你必须使用: Super()._init_()

而不是super(BaseResource, self).__init__()

<强>

super().log("[FAILURE]..unable to read")

而不是self.logger.log("[FAILURE]..unable to read")

如果是 python 2 ,你必须使用: BaseResource.__init__(self)

而不是super(BaseResource, self).__init__()

<强>

self.log("[FAILURE]..unable to read")

而不是self.logger.log("[FAILURE]..unable to read")

答案 2 :(得分:1)

在超级你应该把你的班级类型

>>> class A(object):
...     def __init__(self):
...             print("hi")

>>> class B(A):
...     def __init__(self):
...             super(B, self).__init__()

>>> class C(A):
...     def __init__(self):
...             super(A, self).__init__()

>>> B()
hi
<__main__.B object at 0x0000024F90141C88>

>>> C()
<__main__.C object at 0x0000024F90141D30>