python中a = A()和a = A之间的差异

时间:2015-05-02 21:06:01

标签: python python-3.x

区别:

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也用空参数调用构造函数......

2 个答案:

答案 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()调用该功能,但结果相同。