1

假设我想定义一个类名 MyClass。

我想使用那个类。所以,

class MyClass():

    blabla

MyClass = MyClass(abc)

说我想创建一个函数并在该函数中使用 MyClass 。我发现以下代码将通过异常:

def MyFunction():
    MyClass = MyClass(abc)

MyFunction(123)

有什么帮助吗?我可以这样做

    Myclass1 = MyClass(abc)

但我认为我缺少一些关于命名空间的基本知识。谢谢你!

4

2 回答 2

2

当你执行

MyClass = MyClass(abc)

您正在创建 的新实例MyClass,并将其分配给类本身,而使用Myclass1 = MyClass(abc),您不会覆盖该类。覆盖类不应该抛出异常(异常可能MyFunction()与使用参数调用您的方法有关,因为它不需要任何参数,或者可能MyClass使用参数调用构造函数,因为这也不需要任何参数),但我想这不是你打算做的。

Myclass1 = MyClass(abc)对我来说看起来不错(除了传递的参数),尽管我建议对变量使用myClass1(甚至更好,通常使用的 python 样式my_class1),而不是大写第一个字母,因为它可以防止混淆哪个对象是一个类。

于 2012-09-27T08:20:15.610 回答
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.

在 python 中,变量的名称只是指向内存中某个位置的指针。您可以通过将其指向其他东西来自由地将其分配给另一个位置(对象)。事实上,你定义的大多数东西都是这样工作的(比如方法和类)。它们只是名字。

如果您的方法没有返回值(像大多数类__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'>
于 2012-09-27T08:35:11.677 回答