2012-09-27 170 views
1

可以說我想定義一個類名MyClass。Python類和命名空間?

我想用那個班。所以,

class MyClass(): 

    blabla 

MyClass = MyClass(abc) 

說我想做一個函數,並在該函數中使用MyClass。我發現以下代碼會通過例外:

def MyFunction(): 
    MyClass = MyClass(abc) 

MyFunction(123) 

有幫助嗎?我可以像

Myclass1 = MyClass(abc) 

但我想我缺少一些關於名稱空間的基本知識。謝謝!

+0

你會得到什麼異常? –

回答

2

當你執行

MyClass = MyClass(abc) 

要創建的MyClass一個新實例,並將其分配給類本身,而與Myclass1 = MyClass(abc),你不會覆蓋類。覆蓋類不應該拋出一個異常(這個例外可能是用一個參數調用MyFunction()方法,因爲它沒有任何參數,或者可能用一個參數調用MyClass的構造函數,因爲這不會帶來異常任何一方),但我想這不是你打算做的。

Myclass1 = MyClass(abc)看起來沒事,我(除了被傳入的參數),但我會建議使用myClass1(甚至更好的my_class1通常使用的蟒蛇風格)爲變量,而不是資本的拳頭信,因爲它可以防止混亂關於哪個對象是一個類。

1
MyClass = MyClass(abc) 

上面一行是一樣的這樣做:

def x(): 
    print 'Hello' 
    return 'Hello' 

x() # outputs Hello 
x = x() # Also ouputs 'Hello' (since x() is called) 
x() # Error, since x is now 'Hello' (a string), and you are trying to call it. 

在蟒變量的名稱僅僅是一個指針,指向存儲器中的位置。您可以通過指向其他位置將其自由分配給其他位置(對象)。事實上,你定義的大多數東西都是這樣工作的(比如方法和類)。他們只是名字。

它更奇怪,如果你的方法沒有返回值(像大多數類__init__方法)。在這種情況下,左側是None,您將獲得TypeError: 'NoneType' object is not callable。像這樣:

>>> def x(): 
... print 'Hello' 
... 
>>> x() 
Hello 
>>> x = x() 
Hello 
>>> x() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'NoneType' object is not callable 
>>> type(x) 
<type 'NoneType'>