У меня есть некоторый класс:
class Model(object):
db = None
# another methods
Database
класс:
class Database(object):
''' Proxy class to access sqlite3.connect method '''
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
self.connected = False
self.Model = type('Model%s' % str(self), (Model,), {'db': self})
Я создал класс, расширяющийся от модели:
post.py
:
from orm import Model
class Post(Model):
text = str
def __init__(self, text):
self.text = text
Когда я пытаюсь запустить int:
main.py
:
from orm import Database
from post import Post
if __name__ == '__main__':
db = Database('db.sqlite.test')
Post.db = db
post = Post('Hello').save()
print(post.id)
В некоторых методах, которые я вызываю:
`vars(obj).items()` #obj - Post
, он включаетorm.Database
объект:
dict_items([('__module__', 'post'), ('text', <class 'str'>), ('__init__', <function Post.__init__ at 0x036D5DF8>), ('__doc__', None), **('db', <orm.Database object at 0x035431F0>)**])
Но я создаю объект следующим образом:
main2.py
:
from orm import Database
db = Database('db.sqlite.test')
class Post(db.Model):
random = float
text = str
def __init__(self, text):
self.text = text
if __name__ == '__main__':
post = Post('Hello').save()
print(post.id)
У меня vars(obj).items()
:
dict_items([('__module__', '__main__'), ('text', <class 'str'>), ('__init__', <function Post.__init__ at 0x036F51E0>), ('__doc__', None)])
Ух ты, странно, orm.Database
не включай!Почему это происходит?Почему в первом случае родительская переменная есть, а во втором нет?Как сделать так, чтобы это было не в первом случае?Я понимаю, как ORM организован по этому коду: https://github.com/fernandojunior/python-sqlite-orm