无法检查 Python 中对象的代码

  • 本文关键字:对象 代码 Python python
  • 更新时间 :
  • 英文 :


这是我的代码的开头:

import os
from flask import Flask, render_template, session, redirect, url_for, flash
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
bootstrap = Bootstrap(app)
moment = Moment(app)
db = SQLAlchemy(app)
a=db.Model
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
users = db.relationship('User', backref='role')
def __repr__(self):
return '<Role %r>' % self.name

由于我在Role中没有看到init方法,我想它在父类db中。模型所以我想看看这个类是如何定义的。我在上层脚本和python终端运行中创建了名为"a"的对象:

In [11]: inspect.getmodule(a)
Out[11]: <module 'sqlalchemy.ext.declarative.api' from 'c:\users\laurent\google drive\python\venv\lib\site-packages\sqlalchemy\ext\declarative\api.py'>
In [12]: inspect.getsource(a)
...
C:Python35libinspect.py in findsource(object)
785             return lines, candidates[0][1]
786         else:
--> 787             raise OSError('could not find class definition')
788
789     if ismethod(object):
OSError: could not find class definition

为什么我会出现这个错误?这个类似乎来自一个python脚本(而不是C代码(。此外,如果有人能为我提供父类的__init__方法,那将是一件非常棒的事情!

谢谢(我是代码专家,所以任何检查/调试代码的建议都会很有趣,也许还有其他专门的问题…(。

所以我不完全确定发生了什么——检查模块的精确性非常复杂。

然而,我认为可能导致问题的一件事是查询类的实例:a,而不是实际的类。

如果你确实查询了你得到的类:

>>> t = type(a)
>>> t
flask_sqlalchemy.model.DefaultMeta
>>> inspect.getsourcefile(t)
'...\site-packages\flask_sqlalchemy\model.py'
>>>  inspect.getsource(t)
'class DefaultMeta(NameMetaMixin, BindMetaMixin, DeclarativeMeta):n    passn'

因此,检查类返回适当的源文件似乎是有道理的。我不明白的是,为什么检查类的实例会返回"。。。\站点包\ sqlalchemy\ext\声明性\api.py'.

如果它没有返回包含类定义的文件,我希望它返回实例化的文件,但那将是您运行的脚本,而不是这个api.py文件。

最新更新