为了账号安全,请及时绑定邮箱和手机立即绑定

类型错误:缺少 1 个必需的位置参数:“self”与导入期间作为别名

类型错误:缺少 1 个必需的位置参数:“self”与导入期间作为别名

饮歌长啸 2023-12-12 21:21:13
self我是在另一个 python 文件中定义和调用函数的新手。我正在使用Python 3.7。假设我有两个 python 文件,一个包含类(name.py),另一个在另一个文件(test.py)中调用此类函数。我试图理解为什么 python 在 Try#1 中显示错误,但在 #2 中却没有显示错误?Try#1 定义为别名,但这有什么作用呢?好像没有初始化吧?具有类函数的主文件:name.pyclass NameEmployee:    def __init__(self):        pass    def first_name(self,x):        return print('Hello ',x,'!')要运行的文件:test.py尝试#1:不起作用from names import NameEmployee as nene.first_name(x = 'John') 结果 --> TypeError:first_name() 缺少 1 个必需的位置参数:'self'尝试#2:工作from names import NameEmployeene = NameEmployee()ne.first_name(x = 'John')结果 --> 你好约翰!
查看完整描述

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')


查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信