如何在__init__中使用Faker强制我的Organization对象重新生成假值?

时间:2019-01-05 16:13:49

标签: python faker

我正在使用python进行交叉训练,因此我在这里做的事情很奇怪,但是我生成的所有Organization对象都具有相同的“假”值,我希望每个人都重新应用fakerr方法来获取其值拥有独特的随机数据。

>>>
>>> 
>>> from faker import Faker
>>> fake = Faker()
>>>
>>> class Org(object):
...     def __init__(self, name: str = fake.name()):
...             self.name = name
...             print(self.name)
...
...
>>> print(Org())
Michael Elliott
<__main__.Org object at 0x10242ecc0>
>>> print(Org())
Michael Elliott
<__main__.Org object at 0x10242ecc0>

我每次在实例化Org时都在寻找,默认值是通过调用伪造品来“刷新”的,因此理论上每个Org都有唯一的名称,如果我只是在 init中处理这个名称的话方法,然后在那里随机化?

我很少会为此字段传递一个值,当传入它时,应该将name设置为传入的值,当从Org()调用中省略它时,它应该刷新并为每个生成一个随机的新值实例化的对象。谢谢

1 个答案:

答案 0 :(得分:0)

您可以按照您所说的在__init__方法中执行此操作,但是使用可选参数来确保您仍然可以在没有名称的情况下调用它:

...
def __init__(self, name=None):
    self.name = name or fake.name()
    # print(self.name)

如果您不了解or,请让我解释一下。如果or等于True,则返回第一个值,否则返回第二个值。如果没有给出名称作为参数,则在布尔上下文中name参数将等于False(因为默认情况下它将被设置为None),因此fake.name()用来。如果给出了名称,它将返回True的布尔值,因此将使用此值。

我对静态类型的参数不熟悉,因此无法说出它是否可以不做任何更改,但是乍看之下我认为不会。

请注意,仅在一次中评估函数参数的默认值,这意味着将fake.name()作为默认参数只会在程序运行时生成新名称。