如何在类定义中引用类对象?你能告诉我你会怎么做吗?或者更具体地说,如何在类方法的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
那么你如何解决这个问题呢?:)
我正在使用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在加载时填充字段.我错过了什么或棉花糖不提供这样的功能?