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

use*_*518 2 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
Run Code Online (Sandbox Code Playgroud)

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

for i in range(5):
    person = Test()
    print person.name
Run Code Online (Sandbox Code Playgroud)

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

Den*_*ers 7

在这段代码中:

class Test(object):
    def __init__(self, name=namemethod()):
        self.name = name
Run Code Online (Sandbox Code Playgroud)

默认参数

name=namemethod()
Run Code Online (Sandbox Code Playgroud)

只对整个类进行一次评估(默认参数总是只被评估一次)

你可能想要做的是name=None用作name参数的默认值.在__init__(),你可以做这样的事情:

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

        self.name = name
Run Code Online (Sandbox Code Playgroud)