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

python get new random name for every call of class

每次上课的时候,我都想得到新的随机名字。我把它定义为

1
2
3
4
5
6
def namemethod():
    return ''.join(random.choice(string.lowercase) for x in range(5))

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

我通过for循环调用Test类来获取新的名称,但我一直使用相同的名称,难道不应该调用init方法来获取新的随机名称吗?

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

为什么每次person = Test()都不给namemethod打电话?


在本代码中:

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

默认参数

1
name=namemethod()

只为整个类计算一次(默认参数始终只计算一次)

您可能希望改为使用name=None作为name参数的默认值。在__init__()中,您可以这样做:

1
2
3
4
5
6
class Test(object):
    def __init__(self, name=None):
        if name is None:
            name = namemethod()

        self.name = name

在您的代码中,name=namemethod()默认参数将永久替换为通过调用namemethod返回的单个实例。

您的期望行为可以通过以下方式实现:

1
2
3
4
5
6
def namemethod():
    return ''.join(random.choice(string.lowercase) for x in range(5))

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