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