关于面向对象中的一些概念和执行过程混乱

2015-06-23 12:04:32 +08:00
 cc7756789

正确代码

def wrap(f):
    pass

class AB(object):
    __setattr__ = wrap(object.__setattr__)

为什么函数放在下面就出现找不到错误:

class AB(object):
    __setattr__ = wrap(object.__setattr__)

def wrap(f):
    pass

而 db = SQLAlchemy(app) 实例app放在下面定义不会出错?有没有关于解释这些的文档呢,关于函数,实例如何放置在合适的位置?

db = SQLAlchemy(app)

class User(db.Model):
   pass

app = Flask(__name__)
2621 次点击
所在节点    Python
8 条回复
Septembers
2015-06-23 12:21:34 +08:00
Python的 面向对象 是建立在 面向过程 的基础之上的 所以对执行顺序敏感
cc7756789
2015-06-23 12:24:37 +08:00
@Septembers 但为什么实例化可以在下面进行,不会出现找不到对象的情况?
aec4d
2015-06-23 13:18:39 +08:00
第二个例子你是用什么执行的?不会出错???
cc7756789
2015-06-23 13:30:38 +08:00
@aec4d 第二个例子是出错的,其余两个都是执行正确的
aec4d
2015-06-23 14:13:04 +08:00
@cc7756789
db = SQLAlchemy(app) 我说的是这个例子。你在试试看 是没法正常执行的
tongle
2015-06-23 14:37:15 +08:00
和执行时的变量作用域有关系吧
caoyue
2015-06-23 14:45:14 +08:00
问题就不对吧,第三段应该执行不了
cc7756789
2015-06-23 14:52:49 +08:00
@aec4d http://stackoverflow.com/questions/20744277/sqlalchemy-create-all-does-not-create-tables 我是参考了这个例子的,难道这个答案是错误的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/200506

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX