每次打电话给我时,我都想尝试新的随机名称.我把它定义为
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每次都打电话?
在这段代码中:
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)