【发布时间】:2023-01-25 23:00:31
【问题描述】:
最好提供一个我猜的例子(有点伪代码......)
from django.db import transaction
from somewhere import some_job
from functools import partial
class Foo:
def do_something(self, key, value):
return some_job(key, value)
@property
def modifier(self):
pass
f = Foo()
f.do_something(key='a', value=1) -> result
f.modifier.do_something(key='a', value=1) -> transaction.on_commit(partial(do_something, key='a', value=1))
通常如果做点什么被称为它会做常规的事情并返回一些结果,
但是当它通过链接时修饰符它应该返回 transaction.on_commit(partial(do_something, key='a', value=1)) 而不是常规结果。修饰符可能是类中的属性或其他内容。问题是这个实例是单调的,不应该永久更改,因为它最近会被其他代码使用。
无法全神贯注于如何做到这一点。 有任何想法吗?
【问题讨论】:
-
modifier应该返回包装self并且其do_something方法委托给Foo.do_something的某个其他类的实例。 -
好吧,现在它看起来像描述符。 do_something 也是一个示例方法。可能需要修改的方法很少。它们的名称未知,因为它们可能在子类中定义
-
特性是描述符。
f.modifier只是调用Foo.__dict__['modifier'].__get__(f, Foo),它返回modifier对象的fget属性在应用于f时返回的任何内容。 (换句话说,f.modifier == Foo.modifier.fget(f)。)
标签: python