Странное поведение функции vars (obj) .items () - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть некоторый класс:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...