困惑于类和模块中的变量范围;蟒蛇

时间:2013-02-06 04:43:12

标签: python scope

我试图编写一个包含多个类的模块。我想在每个类中使用相同的变量名,但希望值不同。这样每个定义都将使用在其自己的类顶部定义的变量。

例如:

class assign():
    global a , b
    a = 1
    b = 2

    def aa(x):
        return  a*x



class assign1():
    global a, b
    a = 5
    b = 10


    def aa(x) :
        return a*x

This Produces:

print(assign.aa(3))
=15

print(assign1.aa(3))
=15

全局值不会在不同的类之间切换,我希望它们是。

1 个答案:

答案 0 :(得分:1)

有趣 - 我之前从未见过类名称空间中的global ...基本上,当您创建类时,会向全局添加ab命名空间。然后,在方法调用中,从全局命名空间中选择a(因为没有局部变量a)。你可能想要的是:

#while we're at it, get in the habit of inheriting from object
# It just makes things nicer ...
class assign(object): 
    a = 1
    b = 2

    def aa(self,x):
        return  self.a*x


class assign1(object):
    a = 5
    b = 10

    def aa(self,x) :
        return self.a*x

现在,当您调用aa方法时,python将首先在实例上查找属性a。当在实例上找不到它时,将检查该类(并使用,因为类都具有a属性)。