我想说我想定义一个类名MyClass。
我想要上课。所以,
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
的python样式)用于变量,而不是将第一个字母大写,因为它可以避免混淆哪个对象是一个类。
答案 1 :(得分: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中,变量的 name 只是指向内存中某个位置的指针。您可以通过将其指向其他位置来自由地将其分配给其他位置(对象)。实际上,您定义的大多数内容都是以这种方式工作的(如方法和类)。它们只是名字。
如果你的方法没有返回值(就像大多数类__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'>