在python中使用另一个类的方法

时间:2011-08-08 19:13:46

标签: python google-app-engine instance-methods

我正在使用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会自动添加       你的实例参考。

2 个答案:

答案 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);