面试题答案
一键面试设计思路
- 抽象类和接口定义:
- 定义抽象基类作为接口,例如创建一个
DataProcessorInterface
抽象类用于数据处理模块的接口。在Python中,通过abc
模块实现抽象类。
from abc import ABC, abstractmethod class DataProcessorInterface(ABC): @abstractmethod def process_data(self, data): pass
- 对于显示模块,可以定义
DisplayInterface
抽象类。
class DisplayInterface(ABC): @abstractmethod def display_data(self, data): pass
- 网络通信模块定义
NetworkCommInterface
抽象类。
class NetworkCommInterface(ABC): @abstractmethod def send_data(self, data): pass @abstractmethod def receive_data(self): pass
- 定义抽象基类作为接口,例如创建一个
- 模块间交互方式:
- 数据处理模块实现
DataProcessorInterface
接口。
class DataProcessor(DataProcessorInterface): def process_data(self, data): # 实际的数据处理逻辑 processed_data = data.upper() return processed_data
- 显示模块实现
DisplayInterface
接口,并在需要时调用数据处理模块。
class Display(DisplayInterface): def __init__(self, data_processor): self.data_processor = data_processor def display_data(self, data): processed_data = self.data_processor.process_data(data) print(processed_data)
- 网络通信模块实现
NetworkCommInterface
接口,并且可以与数据处理模块交互。
class NetworkComm(NetworkCommInterface): def __init__(self, data_processor): self.data_processor = data_processor def send_data(self, data): processed_data = self.data_processor.process_data(data) # 实际的网络发送逻辑 print(f"Sending {processed_data} over network") def receive_data(self): # 实际的网络接收逻辑 received_data = "new data" processed_data = self.data_processor.process_data(received_data) return processed_data
- 数据处理模块实现
- 单元测试保证接口正确性:
- 使用
unittest
模块来编写单元测试。
import unittest class TestDataProcessor(unittest.TestCase): def test_process_data(self): data_processor = DataProcessor() result = data_processor.process_data("test") self.assertEqual(result, "TEST") class TestDisplay(unittest.TestCase): def test_display_data(self): data_processor = DataProcessor() display = Display(data_processor) from io import StringIO import sys captured_output = StringIO() sys.stdout = captured_output display.display_data("test") sys.stdout = sys.__stdout__ output = captured_output.getvalue().strip() self.assertEqual(output, "TEST") class TestNetworkComm(unittest.TestCase): def test_send_data(self): data_processor = DataProcessor() network_comm = NetworkComm(data_processor) from io import StringIO import sys captured_output = StringIO() sys.stdout = captured_output network_comm.send_data("test") sys.stdout = sys.__stdout__ output = captured_output.getvalue().strip() self.assertEqual(output, "Sending TEST over network") def test_receive_data(self): data_processor = DataProcessor() network_comm = NetworkComm(data_processor) result = network_comm.receive_data() self.assertEqual(result, "NEW DATA") if __name__ == '__main__': unittest.main()
- 使用
通过这种方式,每个模块都依赖于抽象接口而非具体实现,从而实现低耦合、高内聚,同时通过单元测试保证接口的正确性,提高代码的可扩展性和维护性。