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: