我正在使用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()调用中省略它时,它应该刷新并为每个生成一个随机的新值实例化的对象。谢谢
答案 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()
作为默认参数只会在程序运行时生成新名称。