区别:
class Animal(object):
pass
a = Animal;
a.asdas = 2;
print(vars(a))
输出
{'asdas' : 2}
和
class Animal(object):
pass
a = Animal();
a.asdas = 2;
print(vars(a))
输出
{'asdas': 2, '__doc__': None, '__dict__': <attribute '__dict__' of 'Animal' objects>, '__weakref__': <attribute '__weakref__' of 'Animal' objects>, '__module__': '__main__'}
为什么输出如此不同,似乎a=Animal()
不会创建与a=Animal
相同的对象。这不是很混乱吗?
从答案中可以看出以下内容:
你来自编程世界(C / C ++)时会非常困惑。
我期待a = Animal
也用空参数调用构造函数......
答案 0 :(得分:1)
执行a = Animal
时,您实际上是说变量a
与类(对象)Animal
相同。
但是当你执行a = Animal()
时,Python实际上是在内存中创建类Animal
的实例。这意味着在内存中的特殊位置创建并引用了Animal
类的新实例。此实例将表示类Animal
行为,但不会类本身。
有关此基本计算机科学问题的进一步说明,您可以查看以下问题:What is the difference between an Instance and an Object?。
答案 1 :(得分:0)
在Python中,函数(和类)是对象,因此您可以对对象执行任何操作,包括将它们分配给变量名。
如果您将()
放在函数名后面,那么您将调用它,如果它返回任何内容,该值将被分配给左侧的变量。
如果您不使用()
,则只需将函数本身分配给变量即可。将函数作为参数传递时,或者如果要创建“别名”时,可以执行此操作。一个功能。
如果您执行此操作a = A
,则可以使用a()
或A()
调用该功能,但结果相同。