Python---面向对象和模块

__all__ = ['add', 'number', 'calculate']

# 变量
number = 100
name = 'calculation'


# 函数
def add(*args):
    if len(args) > 1:
        sum = 0
        for i in args:
            sum += i
        return sum
    else:
        print("至少传入两个参数。。。")
        return 0


def minus(*args):
    if len(args) > 1:
        m = 0
        for i in args:
            m -= i
            return m
    else:
        print("至少传入两个参数。。。")


# 类
class Calculate:
    def __init__(self, num):
        self.num = num

    def test(self):
        print('正在使用Calculate进行计算。。。')

    @classmethod
    def test1(cls):
        print('------>Calculate中类方法')


def test():
    print("我是测试")


print(__name__)  # 打印模块名
if __name__ == '__main__':
    print(__name__)  # __name__---->__main__
    test()

------------------------------------------------------------------------------------------------------------------

'''
__init__.py文件
当导入包时,默认调用__init__.py文件
1.当导入包的时候,把一些初始化的函数,变量,类定义在__init__.py文件中
2.此文件中函数,变量等的访问,只需要通过:包名,函数。。。
3.结合__all__=[通过*可以访问的模块]
'''

# import user
#
# from user.models import User
#
# user.create_app()
# user.printA()


from user import *  # from 模块 import * 表示可以使用模块里面所有内容,如果没有定义__all__所有的都可以访问,但是如果添加上了__all__,只有__all__=['','']

                    # 列表中可以访问

                    #from 包 import * 表示该包中内容(模块)是不能访问,就需要__init__.py文件中定义__all__=[可以通过*访问的模块]
user = models.User("admin", "123456")
user.show()

print(test.MAX)

-----------------------------------------------------------------------------------------------------

# from user import models
#
# u=models.User('admin','123456')
# u.show()

# from user.models import User
#
# u=User('admin','123456')
# u.show()
#
# from articel.models import Article
#
# a=Article('个人总结','佳伟')
# a.show()

from user.models import *  # __all__ = ["User"]仅对*起作用
# print(version) 不可查阅
u=User('admin','123456')
'''
article
--models.py
--__init__.py
user
--models.py
--__init__.py
--test.py
package.py

from 包 import 模块
from 包.模块 import 类|函数|变量
from 包.模块 import *
'''

--------------------------------------------------------------------------------------------------------

ctrl+alt+l自动对齐
包的导入:
import XX
from xxx import a,b

文件夹 包:py文件
非py文件 directory(文件夹)
一个包里可以存放多个模块
项目>包>模块>类 函数 变量

marked directory as->Sources Root

使用包中模块中的User类

-----------------------------------------------------------------------------------------------------------

'''

循环导入:大型python项目中,需要很多的python文件,由于架构不当,可能会出现模块间的相互导入
A:模块
    def test():
        f()

B:模块
    def f():
    test()

避免产生循环导入:
1.重新架构
2.将导入的语句放到函数里面
3.把导入语句放到模块最后
'''
from 循环导入2 import func


def task1():
    print('-----task1------')


def task2():
    print('-----task2------')
    func()


# 调用task1
if __name__ == '__main__':
    task1()

    task2()

----------------------------------------------------------------------------------------------------

def func():
    print('-------循环导入2里面的func---1----')
    from 循环导入1 import task1
    task1()
    print('-------循环导入2里面的func---2----')
-----------------------------------------------------------------------
'''
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python则搜索在shell变量Pythonpath下的每个目录
3、如果都找不到,Python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,Pythonpath和由安装过程决定的默认目录。

自定义模块
系统模块
sys模块
'''

import sys

print(sys.path)
print(sys.version)
print(sys.argv)   #运行程序时的参数

--------------------------------------------------------------------------------------------------------------------

'''
在python中,模块是代码组织的一种方式,把功能相近的函数或者类放到一个文件中,一个文件(.py)就是一个模块(module),模块名就是文件
名去掉后缀,这样做的好处是:
-提高代码的可复用、可维护性。一个模块编写完毕后,可以很方便的在其他项目中导入
-解决命名冲突,不同模块中相同的命名不会冲突
1.自定义模块
2.使用系统模块
导入模块:
1.import 模块名
  模块名.变量   模块名.函数   模块名.类
2. from 模块名 import 变量|函数|类
3.from 模块名 import *
该模块中所有的内容
但是如果想限制获取的内容,可以在模块中使用__all__=[使用*可以访问到的内容]
4.无论是import还是from形式,都会将模块内容进行加载
如果不希望其进行调用,就会用到__name__
在自己模块里面__name__叫:__main__
如果在其他模块中通过导入的方式调用的话:__name__:模块名
'''
list1 = [1, 2, 35, 68]

# 导入模块 import 模块名
import calculate

# 使用模块中的函数 模块名.变量   模块名.函数   模块名.类
value = calculate.add(*list1)
print(value)

# 使用模块变量
print(calculate.number)

# 使用模块中的类
cal = calculate.Calculate(88)
cal.test()

calculate.Calculate.test1()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值