Я пытаюсь заставить мой пользовательский класс работать как с BaseModel, так и с FlaskView. Это приводит к ошибке конфликта метакласса, и я не могу ее решить.flask-classy и peewee, ошибка конфликта метакласса
Вещи, которые я пытался решить эту проблему:
Это не работает из-за от noconflict импорта classmaker. Пример с июня 2003 года. Может быть, он слишком стар? Я работаю на python 2.7.3.
http://code.activestate.com/recipes/204197-solving-the-metaclass-conflict/
Также попробовал это решение, см. Ниже код. я получаю эту ошибку: AttributeError: тип объекта 'BaseModel' не имеет атрибута 'метакласса'
Double inheritance causes metaclass conflict
from base_model import BaseModel
from flask.ext.classy import FlaskView
class CombinedMeta(BaseModel.__metaclass__, FlaskView.__metaclass__):
pass
from peewee import *
#sqlite is used for easy testing.
mysql_db = SqliteDatabase('test.db')
class BaseModel(Model):
class Meta:
database = mysql_db
from combined_meta import CombinedMeta
from base_model import BaseModel
from flask.ext.classy import FlaskView
from flask.ext.classy import route
from peewee import *
from flask import request
from utility import response_json
from utility import send_email
from utility import random_string
class User(BaseModel, FlaskView):
__metaclass__ = CombinedMeta
@route('/<username>', methods=['GET'])
def read_user(self, username):
#cool method stuff
Когда я изменяю класс BaseModel к следующему коду я получаю новую ошибку.
класс BaseModel (модель): TypeError: Ошибка при вызове Метакласс базы этот конструктор не принимает никаких аргументов
from peewee import *
#sqlite is used for easy testing.
mysql_db = SqliteDatabase('test.db')
class BaseModel(Model):
class Meta:
database = mysql_db
__metaclass__ = Meta
Я понятия не имею, как я могу это исправить, я новичок в Python. Моя основная цель - заставить программу работать с несколькими классами. Вот почему я пытаюсь работать с фляжкой.
Способ устранения этой проблемы без колб-класса так же желанен, как и любое другое исправление. Если не использовать флягу класса легче, я попробую.
EDIT
When calling the metaclass bases, object.__init__() takes no parameters
class Meta(type):
database = mysql_db
Когда я изменить код для этого я получаю следующее сообщение об ошибке:
TypeError: Ошибка при вызове Метакласс основывает метакласса конфликт: метакласс производного класса должен быть (нестрогим) подклассом метаклассов всех его оснований