TrainCorpusStructure.py 文件中的代码如下:
class TrainCorpusStructure:
inputs = []
from corpusProcess import TrainCorpusStructure
class Demo:
def test(self):
tcs = TrainCorpusStructure()
tcs.inputs.append('fa')
tcs.inputs.append('su')
print(tcs.inputs)
# TrainCorpusStructure.inputs.append('haohao')
# TrainCorpusStructure.inputs.append('tttttttt')
# print(TrainCorpusStructure.inputs)
if __name__ == '__main__':
demo = Demo()
demo.test()
但是遗憾的是提示有错误:
Traceback (most recent call last):
File "/home/ubuntu/workspace/BioEvent/corpusProcess/TestFang.py", line 16, in
tf.test()
File "/home/ubuntu/workspace/BioEvent/corpusProcess/TestFang.py", line 5, in test
tcs = TrainCorpusStructure()
TypeError: 'module' object is not callable
于是在网上查询错误原因: 跟import导入机制有关
正确的写法有两种:
写法1:
from corpusProcess import TrainCorpusStructure
class Demo:
def test(self):
tcs = TrainCorpusStructure.TrainCorpusStructure()
tcs.inputs.append('fang')
tcs.inputs.append('su')
print(tcs.inputs)
# TrainCorpusStructure.inputs.append('haohao')
# TrainCorpusStructure.inputs.append('tttttttt')
# print(TrainCorpusStructure.inputs)
if __name__ == '__main__':
demo = Demo()
demo.test()
import corpusProcess.TrainCorpusStructure as tc
class Demo:
def test(self):
tcs = tc.TrainCorpusStructure()
tcs.inputs.append('fang')
tcs.inputs.append('su')
print(tcs.inputs)
# TrainCorpusStructure.inputs.append('haohao')
# TrainCorpusStructure.inputs.append('tttttttt')
# print(TrainCorpusStructure.inputs)
if __name__ == '__main__':
demo = Demo()
demo.test()
仔细观察import导入的方式:明确一点的是,TrainCorpusStructure.py文件和TestDemo.py文件在同一个包里(即一个文件夹下)
写法1和写法2的区别有两点:
1,导入方式,写法1是:from Corpus import TrainCorpusStructure,
写法2是:import corpusProcess.TrainCorpusStructure as tc
2, 调用方式不同,
写法1是: tcs = TrainCorpusStructure.TrainCorpusStructure(),
写法2是 tcs = tc.TrainCorpusStructure()
补充理解:其实明白了调用的规则非常容易理解,A.py 文件调用B.py文件的方法(注意不是函数)
规则:1,如果调用的是B.py文件中的方法,即B.py 中有Class B: 调用的原则是:模块名—类名—方法名
2, 如果调用的是B.py文件中的函数:模块名—函数名
为了进一步测试:又写了一个类Wu.py
import corpusProcess.Demo as tfl
class Wu:
def hehe(self):
testF = tfl.Demo()
testF.test()
print('测试结果怎么样')
if __name__ == '__main__':
ts = Wu()
ts.hehe()
模块名如果有test或TEST等几个字符会进行单元测试,如果不是进行单元测试,不要使用'Test'这个字符