工厂男孩属性?

2024-10-03 21:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的食谱:

import factory
from models import Foobar


class MenuItemFactory(factory.Factory):
    class Meta:
        model = MenuItem

    name = 'Default Foobar'
    url = factory.LazyAttribute(lambda o: '/%s' % o.name)

我想添加动态属性,比如slug,但我想在单独的方法中添加。我想要这个,因为用lambda的一行程序编写任何更复杂的逻辑都会很难看。在

一个想法浮现在脑海中,使用property方法,就像Django模型中那样。例如:

^{pr2}$

有没有一种方法,类似这样,可以完成我正在努力做的事情?在

编辑

最后我想完成的是:

menu_item = MenuItemFactory(name='foobar')

menu_item.name = 'foobar'
menu_item.url = '/foobar'

其中slug充当一个动态属性。换句话说,我正在寻找一个合适的地方来存储我的动态属性逻辑。在


Tags: 方法lambdanameimporturl属性factory动态
2条回答

结果很简单,我花了一段时间才在文件里找到它。在

@factory.lazy_attribute
def url(self):
    return '/%s' % self.name

您可以使用属性builtin https://docs.python.org/3.6/library/functions.html#property

class Test:
    name = 'bar'

def fget(self):
    return self.name

def fset(self, name):
    self.name = name

Test.slug = property(fget=fget, fset=fset)
t = Test()
print(t.slug)    # 'bar'
t.slug = 'foo'
print(t.slug)    # 'foo'

相关问题 更多 >