2012-09-27 118 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'>