面向对象-基于Python代码例子简谈

本文通过一个简单的Python搜索引擎实现,探讨面向对象编程的四个核心特征:继承、多态、封装和抽象。代码中定义了一个基础的SearchEngineBase类,然后创建了SimpleEngine子类进行功能扩展。通过实例,展示了如何使用类和对象进行模块化开发,以实现高内聚低耦合。同时,解释了面向对象的各个概念及其在实际编程中的应用。
摘要由CSDN通过智能技术生成

最近同事聊起所谓面向对象,这里使用Python实现一个搜索引擎的小功能,来作为对面向对象的理解。相关概念网上很多,这里不再多复述,先从代码走起,再代入概念。

代码功能:根目录下有1.txt 2.txt 3.txt 三个文件,实现输入文件名,返回是否有该文件及该文件的文件大小

代码要实现的功能很简单,这里引用类的写法是为了作为解释面向对象的例子,简单功能可以无需这样写,如若是工程开发,这样写的好处在于通过面向对象的设计,定义好了各功能接口,模块化开发,实现高内聚低耦合。

#SearchEngineBase定义好了各功能接口,通过继承即可对功能进行使用或者再开发
class SearchEngineBase():
    def __init__(self):
        pass

    def add_corpus(self, file_name, file_size):
        self.process_corpus(file_name, file_size)

    def process_corpus(self, id, file_size):
        raise Exception('process_corpus not implemented')

    def search(self,query):
        raise Exception('search not implemented')

#该函数是为了后续调用类使用
def main(search_engine):
    for file_name in os.listdir(os.getcwd()):
        file_size = str(os.path.getsize(os.getcwd() + '\\' + file_name)) + ' byte'
        search_engine.add_corpus(file_name, file_size)

    while True:
        query = input()
        results = search_engine.search(query)
        if len(results) > 0:
            print('file in path.file size are:',results[query])
        else:
            print('file not in path.')

#继承父类,获得功能接口
class SimpleEngine(SearchEngineBase):
    def __init__(self):
        super(SimpleEngine,self).__init__()
        self._id_to_texts={}

    def process_corpus(self, id, file_size):
        self._id_to_texts[id] = file_size

    def search(self,query):
        results = {}
        for k,v in self._id_to_texts.items():
            if query in k:
                results[k] = v
        return results

search_engine = SimpleEngine()
main(search_engine)

#########输出##########
1.txt
file in path.file size are: 193 byte
100.txt
file not in path.

- 面向对象几个特征:

1.继承:理解为子类继承父类的特征和行为,如代码例子SimpleEngine(SearchEngineBase)实现对父类SearchEngineBase的继承,因此可以使用父类中add_corpus,哪怕自己没有定义,也可以通过继承来使用。

2.多态:理解为允许相同或不同子类型的对象对同一消息作出不同响应,如代码例子SimpleEngine在对父类继承后,对process_corpus及search进行了功能重写,也就是继承了但是也可以做不同功能的实现。

3.封装:理解为把数据和操作数据绑定,对外界只暴露接口,如search_engine = SimpleEngine(),就实现了对SimpleEngine类的调用,至于里面如何实现不需要知道,使用函数main(search_engine)即可运行

4.抽象:特征总结后构造类的过程,形成对应的类/属性/方法/对象等,粗略理解可以说整个class就是抽象后的结果。

- 几个概念概念大致的对应理解:

:相似事物的集合,如例子class定义

属性:对象的某个静态特征,例子file_size代表对象(对应文件)的文件大小

方法/函数:对象的某个动态能力,例子使用def定义

对象:集合中的一个事物,这里对应由 class 生成的某一个 object,如例子中的 search_engine

以上均为了便于有对概念直观理解,当然并不严谨。


学习交流,有任何问题还请随时评论指出交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值