0

我正在通过 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 会自动为你添加实例引用。

4

2 回答 2

3

self.data_store.create(data_dictionary)中,self.data_store指的是self.data_store = StandardDataStore()方法中创建的对象__init__

看起来对象的create方法StandardDataStore不需要额外的参数。

于 2011-08-08T19:38:46.543 回答
1

它应该是self.data_store.create(data_dictionary);

于 2011-08-08T19:15:59.423 回答