Python文件和类匹配导入的文件和类

时间:2016-02-29 20:45:54

标签: python

我正在尝试用我自己的模块包装PySerial模块,我无法让它构造PySerial对象。无论我尝试什么,构造函数都会调用我的类,而不是PySerial。

在文件serial.py

import serial as pyserial
class Serial(Stream):
    """
    Class to represent a serial stream.
    """
    def __init__(self, **kwargs):
        super(Serial, self).__init__()
        if 'port' not in kwargs:
            raise Exception('Missing port parameter in serial constructor')
        self._conn = pyserial.Serial()

在主Python脚本中:

try:
    conn = serial.Serial(port=PORT, baud=BAUD)

错误讯息:

C:\workspace> python test_serial_stream.py
F
======================================================================
FAIL: test_constructor (__main__.TestSerialStream)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_serial_stream.py", line 15, in test_constructor
    self.fail("Constructor crashed: "+ ex.message)
AssertionError: Constructor crashed: Missing port parameter in serial constructor

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)

C:\workspace>

从断言消息中,我们可以看到它在构造函数中崩溃了。如果我调试它,它会跳转if,但是它会在异常后调用行中的相同构造函数。这次没有args而且崩溃了。

1 个答案:

答案 0 :(得分:1)

您正在使用名为serial.py的本地文件,该文件与串行库的模块名称相同。当您的脚本运行import serial as pyserial时,实际上pyserial引用您的本地文件serial.py而不是系统库。更简单的解决方案是将脚本从serial.py重命名为myserial.py。此外,请务必删除重命名操作后可能保留的任何serial.pyc