Skip to main content
 首页 » 编程设计

python之在 __init__ 内部,使用 __init__ 外部的变量

2025年05月04日13JeffreyZhao

看完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(),对吗?