# 在实际编程中,稍微复杂一点的程序,通常不会只写一个文件,
# 而是按功能分成不同的模块,在主程序中,可以加载这些模块
# 加载模块有两种方法:
# 一种方法是直接加载整个模块,好处是函数名不会冲突,但是效率稍低
# 另一种方法是只加载模块中的部分函数、或类,但是,要避免函数名冲突
# 例程1 import加载模块
# 该方法加载的模块内部的函数(或类),
# 如果与主程序重名,不影响双方各自使用。
# 有一个文件名为:".\\fin\\bb.fin"的源文件
# 内含一个类AA,和两个函数iadd()、imut()
class AA(object)
{
v1
v2
def add(self)
{
return self.v1 + self.v2
}
def show(self,x)
{
print("x = %\n",x)
}
}
def iadd(x,y)
{
return x+y
}
def imut(x,y)
{
return x*y
}
# 首先对上述文件bb.fin进行编译,生成bb.fie文件,保存在与源文件相同的目录中
/*******************************************************/
# 主程序为:".\\fin\\aa.fin"
# 在主程序中,加载模块 bb
import ".\\fin\\bb" #这里文件名不带扩展名
# 定义一个类AA的成员,参数分别为:v1 = 3,v2 = 4
a = bb.AA(3,4) #类生成器AA,属于模块bb
print("% %\n",a.v1,a.v2) #打印出成员a的参数
a.show(a.add()) #利用类对象的方法show(),来显示类对象的方法add()的结果
print("\n")
print("\n")
c = bb.iadd(1,2) #调用模块bb中的iadd()函数
print("bb.iadd(1,2) = %\n",c) #打印调用iadd()的结果
print("bb.imut(3,4) = %\n",bb.imut(3,4)) #在打印函数中,直接调用模块bb中的函数imut()
# 例程2 from mod import func1,func2, ... 加载模块内部的函数
# 此方法加载的模块内的函数,如果与主程序定义的函数名重名,
# 将发生冲突,后者将覆盖前者。
# 仍然用例程1中的模块 bb
# 对主程序 ".\\fin\\aa.fin",做如下修改:
from ".\\fin\\bb" import AA,iadd,imut # 从模块 bb 中,加载类AA,和两个函数
# 由于类AA已经被直接加载到主程序中,
# 因此,可以直接调用,不需要使用 bb.AA(5,6)
a = AA(5,6)
a.show(a.v1)
a.show(a.add())
print("\n")
print("\n")
# 同样,可以直接调用函数iadd()和imut()
c = iadd(1,2)
print("%\n",c)
print("%\n",imut(3,4))