看完this回答,我明白 __init__ 之外的变量由类的所有实例和 __init__ 内的变量共享每个实例都是唯一的。
我想使用所有实例共享的变量,随机给我的类实例一个唯一的参数。这是我尝试过的较短版本;
from random import choice
class Chromosome(object):
variable1 = [x for x in range(1,51)]
variable2 = [x for x in range(51,101)]
def __init__(self):
self.var1 = choice(variable1)
self.var2 = choice(variable2)
我的问题是在初始化新实例时无法访问实例变量,错误消息显示 name "variable1" is not defined , 有没有办法解决这个问题?
编辑:我想在 __init__ 之外创建列表的原因是为了节省内存,如果我创建 10.000 条染色体,每条染色体大约有 10-15 个变量,那么最好只创建一次列表,而不是为每条染色体创建它们。
EDIT2:如果有人想使用它,我的最终解决方案涉及使用 random.randrange(a,b+1,2) .这会在 [a,b] 范围内选择一个随机数(只有偶数),包括边界。
请您参考如下方法:
引用时只需要使用类名即可。对 Python 说 variable1 将使它从作用域中找到一个变量。但是,您的变量是一个类的属性。
from random import choice
class Chromosome(object):
variable1 = [x for x in range(1,51)]
variable2 = [x for x in range(51,101)]
def __init__(self):
self.var1 = choice(Chromosome.variable1)
self.var2 = choice(Chromosome.variable2)
同样,您可以使用 self.variable1,因为它只是该类的一个实例并且也可以访问该类的属性。
这里的主要思想是,当您访问类的任何属性或方法时,您必须提供一个可以访问这些方法的对象,无论是类、子类还是其中任何一个的实例。您不会将 dict.from_keys() 调用为 from_keys(),对吗?
