我正在通过 Google App Engine 上的“Dive Into Python”工作,并在尝试从另一个类调用一个类的方法时遇到了这个错误:
ERROR __init__.py:463] create() takes exactly 1 argument (2 given)
Traceback (most recent call last):
File "main.py", line 35, in get
dal.create("sample-data");
File "dataAccess/dal.py", line 27, in create
self.data_store.create(data_dictionary);
TypeError: create() takes exactly 1 argument (2 given)
这是我的主要课程:
# filename: main.py
from dataAccess.dal import DataAccess
class MySampleRequestHandler(webapp.RequestHandler):
"""Configured to be invoked for a specific GET request"""
def get(self):
dal = DataAccess();
dal.create("sample-data"); # problem area
MySampleRequestHandler.get()
尝试实例化和调用DataAccess
在其他地方定义的:
# filename: dal.py
from dataAccess.datastore import StandardDataStore
class DataAccess:
"""Class responsible for wrapping the specific data store"""
def __init__(self):
self.data_store = None;
data_store_setting = config.SETTINGS['data_store_name'];
if data_store_setting == DataStoreTypes.SOME_CONFIG:
self.data_store = StandardDataStore();
logging.info("DataAccess init completed.");
def create(self, data_dictionary):
# Trying to access the data_store attribute declared in __init__
data_store.create(data_dictionary);
我想我可以DataAccess.create()
用 1 个参数作为它的参数来调用,特别是根据 Dive into Python 注释关于类方法调用的方式:
在定义你的类方法时,你必须明确地将 self 作为每个方法的第一个参数,包括
__init__
. 当您从您的类中调用祖先类的方法时,您必须包含 self 参数。但是当你从外部调用你的类方法时,你没有为 self 参数指定任何东西;你完全跳过它,Python 会自动为你添加实例引用。