Can';t访问继承的Python类中的父属性

Can';t访问继承的Python类中的父属性,python,inheritance,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=loggi

这是我的家长班

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'
我做错了什么。

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

另外,如果这是Python3,您可以将其简化为
super()
;如果是Python2,还需要将
BaseResource
的声明更改为

class BaseResource(object):
获取新样式的类。

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

另外,如果这是Python3,您可以将其简化为
super()
;如果是Python2,还需要将
BaseResource
的声明更改为

class BaseResource(object):

要获得一个新样式的类。

在super中,您应该输入您的类类型

>>> 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>
>>A类(对象):
...     定义初始化(自):
...             打印(“hi”)
>>>B(A)类:
...     定义初始化(自):
...             super(B,self)。\uuuuu init\uuuuuuu()
>>>C(A)类:
...     定义初始化(自):
...             超级(A,self)。\uuuu init\uuuuu()
>>>B()
你好
>>>C()

在super中,您应该输入您的类类型

>>> 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>
>>A类(对象):
...     定义初始化(自):
...             打印(“hi”)
>>>B(A)类:
...     定义初始化(自):
...             super(B,self)。\uuuuu init\uuuuuuu()
>>>C(A)类:
...     定义初始化(自):
...             超级(A,self)。\uuuu init\uuuuu()
>>>B()
你好
>>>C()

如果是python 3,则必须使用:
Super()

而不是
super(BaseResource,self)。\uuuu init\uuuu()

super().log(“[故障]…无法读取”)

而不是
self.logger.log(“[FAILURE]…无法读取”)

如果它是python 2,则必须使用:
BaseResource.\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

而不是
super(BaseResource,self)。\uuuu init\uuuu()

self.log(“[故障]…无法读取”)


如果是Python3,则必须使用以下命令,而不是
self.logger.log(“[FAILURE]…无法读取”)

Super()

而不是
super(BaseResource,self)。\uuuu init\uuuu()

super().log(“[故障]…无法读取”)

而不是
self.logger.log(“[FAILURE]…无法读取”)

如果它是python 2,则必须使用:
BaseResource.\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

而不是
super(BaseResource,self)。\uuuu init\uuuu()

self.log(“[故障]…无法读取”)


而不是
self.logger.log(“[FAILURE]…无法读取”)

无法复制:如果这是python3,您可以简化对
super()的
super
调用。
@melpomene imho,调用\u postan't reproduction:如果这是python3,您可以简化对
super()的
super
调用
@melpomene imho,call on_post这很有效,但很奇怪,
类BaseResource(object)
是旧的Python 2样式,对吧?但现在我得到了以下错误,
TypeError:log()缺少一个必需的位置参数:“msg”
,所以我想这是另外一个问题,我试图从super调用一个方法,但我传入了正确的参数,但仍然得到了一个错误。@Melisastewart:这很有效,但很奇怪,
class BaseResource(object)
是旧的Python 2样式,对吗?但现在我得到了以下错误,
TypeError:log()缺少1个必需的位置参数:“msg”
,因此我想这是一个额外的问题,我试图从super调用一个方法,并且我传入了正确的参数,但仍然得到一个错误。@MelissaStewart: