2016-06-25 2 views
1

Я использую мотор с торнадо. У меня есть следующий класс:Динамическая инициализация БД в конструкторе

class N(): 
     def __init__(self,collectionName host='localhost', port=27017): 
     self.con=motor.MotorClient(host,port) 
     self.xDb=self.con.XDb 
     setattr(self,collectionName,self.xDb[collectionName]) 

Это действительно родительский класс, который я хочу расширить. Класс child вызовет этот класс 'init, чтобы установить имя коллекции. Проблема в том, что у меня есть и другие методы в этом классе.

@tornado.gen.coroutine 
    def dropDB(self): 
     yield self.xDb.drop_collection(self.COLLECTION??) 

выше нарушается, потому что я динамически установить коллекцию в инициализации то, что способ, которым я могу определить себя. переменная, которую я установил для использования в базовых методах?

ответ

2

Установить другую переменную:

class N(): 
    def __init__(self, collectionName, host='localhost', port=27017): 
     # ... your existing code ... 
     self.collectionName = collectionName 

    @tornado.gen.coroutine 
    def dropDB(self): 
     yield self.xDb.drop_collection(self.collectionName) 

С drop_collection принимает имя или объект MotorCollection, есть и другие способы, которыми Вы могли бы хранить эти данные на self, но так, как я показал, может быть самым простым.

http://motor.readthedocs.io/en/stable/api/motor_database.html#motor.motor_tornado.MotorDatabase.drop_collection

Смежные вопросы