【发布时间】:2019-05-28 10:11:29
【问题描述】:
我正在尝试从这个类编写一个子类:
class InsertCreateAlter(object):
def __init__(self, url=None, engine=None, connection=None, session=None,
**kwargs):
if connection is not None:
self.engine = connection
elif engine is not None:
self.engine = engine
elif session is not None:
self.engine = session
else:
self.engine = sqlalchemy.create_engine(url, **kwargs)
这是我迄今为止的尝试:
class InsertCreateAlterEAV(InsertCreateAlter):
def __init__(self, url=None, engine=None, connection=None, session=None,
**kwargs):
InsertCreateAlter.__init__(self, url=None, engine=None, connection=None, session=None,
**kwargs)
if connection is not None:
self.engine = connection
elif engine is not None:
self.engine = engine
elif session is not None:
self.engine = session
else:
self.engine = sqlalchemy.create_engine(url, **kwargs)
当我调用函数时:
InsertCreateAlterEAV(session=session)
我得到了错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-4-ee54fec26f76>", line 2, in <module>
InsertCreateAlterEAV(session=session)
File "/Users/asportelli/Documents/gitRepos/etl/etl/eav/InsertCreateAlterEAV.py", line 18, in __init__
**kwargs)
File "/Users/asportelli/Documents/gitRepos/etl/etl/insert/InsertCreateAlter.py", line 27, in __init__
self.engine = sqlalchemy.create_engine(url, **kwargs)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/__init__.py", line 425, in create_engine
return strategy.create(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/strategies.py", line 52, in create
plugins = u._instantiate_plugins(kwargs)
AttributeError: 'NoneType' object has no attribute '_instantiate_plugins'
【问题讨论】:
-
你试过
super()吗? -
你怎么称呼这个?
-
@shaikmoed 是的,也没有快乐
-
@doctorlove 我编辑它的问题
-
为什么
engine默认为None?另外,您为什么要从父类调用__init__()而不是正常构造它?即使您将engine的其他内容提供给您的子类,您对父类的__init__()调用也会将其提供给None。您也不会将此__init__()调用的结果分配给任何内容,因此它会立即丢失。
标签: python class oop inheritance