【发布时间】:2023-03-25 01:14:01
【问题描述】:
我正在尝试为我编写的 HTTP RESTful API 构建一个 python3 模块。
我的想法是创建一个base 类,它应该有一个request.Session() 属性,这样我就可以为其分配一个授权令牌标头,而不必再担心它以及一个记录器功能等等。
问题是一个名为User 的类继承自两个类:PublicUser 和base,我无法正确初始化它们。
这是我第一次使用继承类,所以显然我遗漏了一些东西。
这是我的文件夹结构:
examplemodule/
|--> __init__.py
|--> classes/
|--> base.py
|--> user.py
base.py
from requests import Session
from requests.sessions import session
class Logger:
def __init__(self):
pass
def log(self, message):
print(message)
class Base:
def __init__(self, token=None):
if not hasattr(self, 'logger'):
self.logger = Logger()
if not hasattr(self, 'session'):
self.session = Session()
self.session.headers.update(
{'authorization': 'Token {}'.format(token)}
)
# Try to login to see if token is valid, if not raise exception
# If token is valid then the retrieved user json is saved
self._user = {
'id': 1,
'username': 'test1',
'email': 'test@test.com'
}
user.py
from .base import Base
PUBBLIC_USER_ATTRS = ['id', 'username']
PRIVATE_USER_ATTRS = ['email']
class PublicUser:
def __init__(self, user):
for k in PUBBLIC_USER_ATTRS:
setattr(self, k, user[k])
class User(Base, PublicUser):
def __init__(self, token=None):
super(Base, self).__init__(token=token)
super(PublicUser, self).__init__(self._user)
for k in PRIVATE_USER_ATTRS:
setattr(self, k, self._user[k])
__init__.py
from .classes.user import User
然后测试我运行的模块:
import examplemodule
examplemodule.User(token='')
但不幸的是,我在super(Base, self).__init__(token=token) 收到了TypeError
TypeError: super() 没有关键字参数
解决这个问题的最佳方法是什么?
【问题讨论】:
标签: python python-3.x inheritance multiple-inheritance