2013-02-06 76 views
0

我想寫一個包含多個類的模塊。我想在每個類中使用相同的變量名,但希望這些值不同。因此,每個定義都將使用其自己類的頂部定義的變量。混淆類和模塊中的變量作用域; python

例如:

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 

這將產生:

print(assign.aa(3)) 
=15 

print(assign1.aa(3)) 
=15 

全局值沒有不同類別之間切換,我想他們是。

+2

爲什麼你使用'global'如果你想變量是_different?_ –

+0

看起來你的方法需要在那裏有一個'self',因爲它們沒有用'staticmethod'或任何喜歡... – mgilson

回答

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方法,蟒蛇將首先查找在實例屬性a。當它在實例中找不到時,該類將被檢查(並且因爲這兩個類都有一個a屬性)。