python为每次调用类获取新的随机名称

时间:2018-01-29 17:51:24

标签: python python-2.7

每次打电话给我时,我都会尝试获取新的随机名称。 我将其定义为

def namemethod():
    return ''.join(random.choice(string.lowercase) for x in range(5))

class Test(object):
    def __init__(self, name=namemethod()):
        self.name = name

我正在调用Test类来循环获取新名称,但我一直得到相同的名称,是不是要调用init方法并获取新的随机名称?

for i in range(5):
    person = Test()
    print person.name

为什么person = Test()每次都没有调用namemethod

2 个答案:

答案 0 :(得分:7)

在此代码中:

class Test(object):
    def __init__(self, name=namemethod()):
        self.name = name

默认参数

name=namemethod()

仅对整个类进行一次评估(默认参数始终只被评估一次)

您可能想要做的是使用name=None作为name参数的默认值。在__init__()中,您可以执行以下操作:

class Test(object):
    def __init__(self, name=None):
        if name is None:
            name = namemethod()

        self.name = name

答案 1 :(得分:3)

在您的代码中,var append = file => content => fsp.appendFile(file, JSON.stringify(content)); 默认参数将被调用name=namemethod()

返回的单个实例永久替换

您可以使用以下方式实现您想要的行为:

namemethod