Python 为类属性生成随机数
我有以下代码:Python 为类属性生成随机数,python,python-3.x,numpy,random,Python,Python 3.x,Numpy,Random,我有以下代码: 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 = Per
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')
每个人都有相同的年龄。如何解决此问题?之所以
age
总是相同的,是因为age
参数的值是在定义方法\uuuu init\uuuu
时定义的,并且不会在每次调用方法时重新创建,如果希望每次调用方法时都更改变量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
这种行为的原因是属性的默认值只被初始化并设置了一次,因此代码片段
random.randint(18,65)
将被执行并设置为年龄的默认值,这就是如果不提供年龄,则年龄的默认值相同的原因
要解决问题请将默认值设置为“无”,并在需要时执行随机值的检查和分配:
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
有关默认属性的有用信息:
if age
vsif age is None
是完全不同的,解释推理也与我的观点不同(如果您对原因感兴趣,这就是给出另一个答案的原因)。我对差异感兴趣?一个测试值是否为非类型,另一个检查值是否不=0?正确吗?不,一个检查非类型,另一个检查值是否为falsy(更多信息:)