【发布时间】:2020-11-01 18:21:56
【问题描述】:
我遇到了一个非常奇怪的错误。我的项目涉及以下代码段:
from contextlib import contextmanager
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
def get_instance(cls):
return cls._instances[cls]
class SessionManager(object, metaclass=Singleton):
_engines = {}
_db_config = {}
def __init__(self, db_config: dict, **kwargs):
"""
Parent initializer. Takes SQLAlchemy database config parameters.
:param db_config: Database config, consisting of known SQLAlchemy
config key/values
:type db_config: dict
:return: self
"""
self._engine = None
self._engine_string = None
self._db_config = db_config
...
...
当我在 macOS 中使用 Python 3.5 运行时,它可以正常工作。但是,当我将项目迁移到 Ubuntu 18.04 并使用 Python 3.6 运行时,它会抱怨语法错误:
Traceback (most recent call last):
File "run.py", line 5, in <module>
from views import default
File "/home/john/p/a/views/default.py", line 11, in <module>
from utils.TaskManagerQueue import TaskManagerQueue
File "/home/john/p/a/utils/TaskManagerQueue.py", line 5, in <module>
from utils.SessionManager import SessionManager
File "/home/john/p/a/utils/SessionManager.py", line 19
class SessionManager(object, metaclass=Singleton):
^
SyntaxError: invalid syntax
我在网上搜索过,确认类多继承class SessionManager(object, metaclass=Singleton)是正确的。这里有什么问题?
【问题讨论】:
标签: python-3.x multiple-inheritance metaclass