我用两种方法创建了一个“Employee”类,如下所示。我知道没有对象的实例化,类本身就无法访问这些实例方法。
但是,如果没有任何对象实例化,以下代码如何工作?
>>> class Employee:
def __init__(self,name):
self.name = name
def getName(self):
return self.name
>>> Employee('John Doe').getName() #how this code is working??
'John Doe'
我在上面的代码中没有看到任何对象实例化的迹象。但它有效,怎么样?
答案 0 :(得分:0)
您执行创建实例。这就是调用类所做的,它会创建一个实例:
>>> Employee('John Doe')
<__main__.Employee instance at 0x1042bab48>
您无需存储该实例即可在同一表达式中使用它。通过添加.getName()
属性查找并调用Employee('John Doe')
部分的结果,您只需链接查找方法并将其调用到同一语句中。
分配只是为刚刚创建的实例创建一个新引用,以便稍后可以引用该实例;稍后使用该命名引用会导致Python再次检索实例,以便您调用该方法。
将以下输出与上述实例的创建进行比较:
>>> employee = Employee('John Doe')
>>> employee
<__main__.Employee instance at 0x1042bac68>
唯一的区别是,现在我将创建实例的结果存储在名为employee
的变量中。再次使用该名称会导致实例再次回显。
对于Python,使用Employee('John Doe').getName()
和employee.getName()
之间没有区别,两者在实例上查找属性getName
然后调用它。