这是我的父类,
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'
我在这里做错了什么。
答案 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>