Python中如何导入类示例详解
前言
随着我们不断地在一个文件中添加新的功能,就会使得文件变得很长。即便使用了继承,也抑制不住类的成长。为了解决这一问题,我们可以将类存储在模块中,然后在主程序中导入所需的模块,这样可以让文件尽可能保持整洁,从而实现更好的管理。
导入类是一种很有效的编程方式。这样我们就可以把大部分逻辑存储在独立的文件中,然后在主程序编写高级逻辑咯O(∩_∩)O哈哈~
1导入一个类
假设有一个User类,文件名为User.py,这个待导入的文件,一般称为模块:
classUser(): '''账号信息''' def__init__(self,name,pwd): '''初始化''' self.name=name self.pwd=pwd #登陆次数 self.login_count=0 defprint_login_count(self): '''打印登陆次数''' print('登陆次数='+str(self.login_count)) defupdate_login_count(self,num): '''更新登陆次数''' self.login_count=num defvalid(self): '''是否验证通过''' print(self.name+'验证通过')
我们再定义一个名为deniro.py的文件,来导入刚刚定义的User类:
fromUserimportUser deniro=User('deniro','1') print('账号名:'+deniro.name)
运行结果:
账号名:deniro
2导入一个模块多个类
可以根据需要,在同一个模块中定义任意数量的类,不过这些在同一个模块中的类最好是相关的。
我们在User.py中定义了一个 Privilege类,并作为User类的属性:
classUser(): '''账号信息''' def__init__(self,name,pwd): '''初始化''' self.name=name self.pwd=pwd #登陆次数 self.login_count=0 #拥有的权限 self.privileges=Privilege(['修改某某账号密码','禁用某某账号']) defprint_privileges(self): '''打印拥有的权限''' print(self.privileges.contents) ... classPrivilege(): '''权限''' def__init__(self,contents): self.contents=contents
然后在新的文件中调用它:
#导入一个类 fromUserimportUser deniro=User('deniro','1') print('拥有的权限:'+str(deniro.privileges.contents))
运行结果:
拥有的权限:['修改某某账号密码','禁用某某账号']
3导入多个类
可以在一个模块中导入多个类,用逗号分隔这些需要导入类。导入后,就可以根据应用场景,来创建任意数量的类实例。
fromUserimportUser,Privilege
fromUserimportUser,Privilege p=Privilege(["删除账号权限"]) print('权限内容:'+str(p.contents))
运行结果:
权限内容:['删除账号权限']
4导入模块
我们还可以一次性导入整个模块,这需要使用句点表示法来调用相应的类:
importUser ... p=User.Privilege(["删除账号权限"]) ...
4导入所有类
fromUserimport*
非必要,不使用这种导入方式,因为:
- 通过文件开头定义良好的import语句,我们就可以清楚地知道使用了哪些类。但这种导入方式没有提供这种好处。
- 如果不小心导入了一个与本程序文件中同名的类,就会引发难以诊断的错误。
如果确实需要从一个模块中导入很多类,那么建议导入整个模块,然后使用module_name.class_name语法来调用它们。
5在模块中导入另一个模块
为了避免模块太大或者保证模块中的类都是相关的,这时就需要将类分散到多个模块中。这样,可能一个模块中的类会依赖另一个模块中的类。这种场景下,我们就会在一个模块中导入另一个模块。因为导入语法相同,所以在此就不赘述啦O(∩_∩)O~
建议一开始让代码结构尽可能简单。即先尽可能在一个文件中完成所有的工作,确定一切都能满足业务要求正确执行后,再将类移到独立的模块中。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。