python大作业100行代码面向对象_面向对象-基于Python代码例子简谈

最近同事聊起所谓面向对象,这里使用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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值