小编Gen*_* D.的帖子

在类定义中自引用

如何在类定义中引用类对象?你能告诉我你会怎么做吗?或者更具体地说,如何在类方法的decorator中传递类对象?这是一个简单的例子,我正在尝试传递第二种方法,我正在声明第一种装饰器.

def decorate(w):
    def _wrap(f):
        def _call(*args, **kwargs):
            return w(f(*args, **kwargs))
        def _call
    return _wrap

class A():

    @dec(A.w)
    def f():
        return 2

    def w(f):
        return fr + 5 
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,提出了例

NameError: name 'A' is not defined
Run Code Online (Sandbox Code Playgroud)

由于我的调查,我了解到,当我在内部或功能时,globals()不包含A键,但在内部定义.所以我可能会找到通过字符串名称传递的方法(例如),但在这种情况下,不可能在闭包内缓存方法搜索.decorate_wrap_call@dec('A.w')_wrap

那么你如何解决这个问题呢?:)

python class decorator class-members python-decorators

5
推荐指数
1
解决办法
3649
查看次数

在加载时强制"无"并在转储时跳过"无"

我正在使用marshmallow 2.0.0rc2验证HTTP请求的输入数据,并在HTTP响应上将SQLAlchemy模型加载到JSON.我偶然发现了两个问题:

首先,在HTTP PUT请求中从JSON加载数据时,我想将所有缺少的字段填充为None,以正确覆盖SQLAlchemy中的数据.现在我正在使用以下代码:

for name, field in schema.fields.iteritems():
    if field.missing == ma.missing:
        schema.fields[name].missing = None
Run Code Online (Sandbox Code Playgroud)

它的工作原理,但我认为它已被窃听,因为我正在搞乱marshmallow.Field连接到Schema类的实例.在处理Schema实例后,我们修补的所有字段都会遇到新的缺失而不是默认缺失.

其次,在将数据从SQLAlchemy转储到JSON时,所有丢失的字段都被解析为None,并且JSON填充了{"key": null, }数据.这是不受欢迎的行为,我在post_dump触发器上清理它们.

@post_dump
def clean_missing(self, data):
    for key in filter(lambda key: data[key] is None, data):
        data.pop(key)
    return data
Run Code Online (Sandbox Code Playgroud)

与之前相同,它正在工作,但包括创建一些BaseSchema类将这个逻辑传递给所有继承的类.

我一直在搜索文档,并没有找到任何正确的方法来交换这种行为,即在转储时跳过字段并None在加载时填充字段.我错过了什么或棉花糖不提供这样的功能?

python marshmallow

5
推荐指数
1
解决办法
1545
查看次数

将多个迁移压缩为一个

我做了多次小迁移.

  1. 添加A列
  2. 删除A列
  3. 添加A列

是否有可能将这些迁移压缩成一个?

python alembic

4
推荐指数
1
解决办法
1365
查看次数