我有以下代码:
from numpy import random
class Person():
def __init__(self, name, age=random.randint(18,65)):
self.name = name
self.age = age
除非明确指出,否则我希望年龄为18到65之间的随机数。但是,当我创建此类的不同实例时,如下所示:
p1 = Person('Bob')
p2 = Person('Sue')
p3 = Person('Jeff')
每个人的年龄始终相同。我该如何解决这个问题?
答案 0 :(得分:2)
age
始终相同的原因是因为age
参数的值是在定义方法__init__
时定义的,并且每次调用方法时都不会重新创建age
参数,如果要在每次调用方法时更改变量from numpy import random
class Person():
def __init__(self, name, age=None):
self.name = name
self.age = age if age else random.randint(18, 65)
p1 = Person('Bob')
p2 = Person('Sue', 20)
p3 = Person('Jeff')
print(p1.age)
>> 56
print(p2.age)
>> 20
print(p3.age)
>> 20
print(Person('Sue', 20).age)
>> 20
,请在方法中移动变量<info>
<parent index='0'>
<name>test1</name>
<children>
</children>
</parent>
<parent index='1'>
<name>test2</name>
<children>
<VALUE index='0'>test3</VALUE>
<VALUE index='1'>test4</VALUE>
</children>
</parent>
<parent index='2'>
<name>test3</name>
<impvalue>true</impvalue>
</parent>
<parent index='3'>
<name>test4</name>
<impvalue>false</impvalue>
</parent>
</info>
的实例化
<info>
<parent index='0'>
<name>test1</name>
<children>
</children>
<impvalue>false</impvalue>
</parent>
<parent index='1'>
<name>test2</name>
<children>
<VALUE index='0'>test3</VALUE>
<VALUE index='1'>test4</VALUE>
</children>
<impvalue>true</impvalue>
</parent>
<parent index='2'>
<name>test3</name>
<impvalue>true</impvalue>
</parent>
<parent index='3'>
<name>test4</name>
<impvalue>false</impvalue>
</parent>
</info>
答案 1 :(得分:2)
该行为的原因是属性的默认值正在初始化并且只设置一次,因此代码片段random.randint(18,65)
将被执行并设置为age的默认值,这就是具有相同默认值的原因如果没有提供年龄,则为年龄。
解决问题将默认值设置为无,并根据需要执行检查和分配随机值:
from numpy import random
class Person():
def __init__(self, name, age=None):
if age is None:
age = random.randint(18,65)
self.name = name
self.age = age
有关默认属性的有用信息: