1 回答
TA贡献1852条经验 获得超1个赞
重要的是要确定这与“别名”无关,而是简单的事实,即这两段代码不相等!
让我们从简化第二次尝试开始。我们将简单地删除中间变量的使用,以获得:
from names import NameEmployee
NameEmployee().first_name(x='John')
现在,进行第一次尝试,让我们暂时删除别名:
from names import NameEmployee
NameEmployee.first_name(x='John')
现在您可以清楚地看到差异:第二次尝试实际上调用(使用这些())构造函数,从而隐式传递self新创建的实例。
但是第一次尝试first_name直接从类调用该方法,而不是类的实例self,因此永远不会传递(NameEmployee().first_name(x='John')相当于NameEmployee.first_name(NameEmployee(), x='John')whileNameEmployee.first_name(x='John')就是它的本质 - 调用first_name而不传递self...)。
让我们进行逆向工程:
我们现在要调用构造函数,如 try 2:
from names import NameEmployee
NameEmployee().first_name(x='John')
现在我们要别名:
from names import NameEmployee as ne
ne().first_name(x='John')
(请记住,别名只是名称替换)
现在,如果您愿意,可以将对象分离到一个新变量:
from names import NameEmployee as ne
name_employee = ne()
name_employee.first_name(x='John')
添加回答
举报