Теоретически я понимаю разницу между методом класса и методом экземпляра. Теперь у меня есть практический пример, в котором я пытаюсь воспользоваться преимуществами методов класса.
По сути, у меня есть оболочка mongodb, которая выглядит следующим образом:
class Model(dict):
__getattr__ = dict.get
__delattr__ = dict.__delitem__
__setattr__ = dict.__setitem__
def create(self):
self.collection.insert(self)
Вот как я ее использую:
class Document(Model):
collection = mongo.db.My_collection
x = Document({'Name': 'BOB', 'Age': 26})
x.create()
Теперь я хотел бы воспользоваться преимуществами методов класса, чтобы избежать создания экземпляров моих объектов. Вот подход, который я выбрал:
class Document(Model):
collection = mongo.db.My_collection
@classmethod
def create_item(cls, item):
cls.create(item)
Document.create_item({'Name': 'BOB', 'Age': 26})
Здесь я наследую от Model
класса. Затем я создаю метод класса create_item
. Наконец, я пытаюсь вызвать метод create
родительского класса, но получаю ошибку:
AttributeError: 'dict' object has no attribute 'collection'
Итак, мои вопросы:
- Как создать метод класса связаться с методом экземпляра родительского класса?
- Во-вторых, какова была бы лучшая стратегия для реализации этих классов с использованием методов класса?