Я работаю через 'Dive Into Python' в Google App Engine и столкнулся с этой ошибкой, пытаясь вызвать методы одного класса из другого:
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.
Но когда вы вызываете ваш метод класса извне, вы ничего не указываете
для аргумента себя; Вы пропускаете это полностью, и Python автоматически добавляет
ссылка на экземпляр для вас.