我正在使用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);
我以为我可以用{1}参数调用DataAccess.create()
,特别是根据Dive into Python关于类方法调用的说明:
定义类方法时,必须将self明确列为第一个 每种方法的参数,包括
__init__
。当你调用一个方法 您的类中的祖先类必须包含self参数。 但是当你从外面调用你的类方法时,你没有指定任何东西 为了自我辩论;你完全跳过它,Python会自动添加 你的实例参考。
答案 0 :(得分:3)
在self.data_store.create(data_dictionary)
中,self.data_store
是指self.data_store = StandardDataStore()
方法中由__init__
创建的对象。
看起来create
对象的StandardDataStore
方法不期望有额外的参数。
答案 1 :(得分:1)
应为self.data_store.create(data_dictionary);