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

核心提示最近同事聊起所谓面向对象,这里使用Python实现一个搜索引擎的小功能,来作为对面向对象的理解。相关概念网上很多,这里不再多复述,先从代码走起,再代入概念。代码功能:根目录下有1.txt 2.txt 3.txt 三个文件,实现输入文件名,返

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

代码功能:根目录下有1.txt 2.txt 3.txt 三个文件,实现输入文件名,返回是否有该文件及该文件的文件大小
代码要实现的功能很简单,这里引用类的写法是为了作为解释面向对象的例子,简单功能可以无需这样写,如若是工程开发,这样写的好处在于通过面向对象的设计,定义好了各功能接口,模块化开发,实现高内聚低耦合。

#SearchEnginebase定义好了各功能接口,通过继承即可对功能进行使用或者再开发

class

SearchEnginebase

:

def

__init__

:

pass

def

add_corpus

:

self

.

process_corpus

def

process_corpus

:

raise

Exception

def

search

:

raise

Exception

#该函数是为了后续调用类使用

def

main

:

for

file_name

in

os

.

listdir

):

file_size

=

str

+

'

'

+

file_name

))

+

' byte'

search_engine

.

add_corpus

while

True

:

query

=

input

results

=

search_engine

.

search

if

len

>

0

:

print

else

:

print

#继承父类,获得功能接口

class

SimpleEngine

:

def

__init__

:

super

.

__init__

self

.

_id_to_texts

=

{}

def

process_corpus

:

self

.

_id_to_texts

[

id

]

=

file_size

def

search

:

results

=

{}

for

k

,

v

in

self

.

_id_to_texts

.

items

:

if

query

in

k

:

results

[

k

]

=

v

return

results

search_engine

=

SimpleEngine

main

#########输出##########

1.

txt

file

in

path

.

file

size

are

:

193

byte

100.

txt

file

not

in

path

.

  • 面向对象几个特征:
1.继承:理解为子类继承父类的特征和行为,如代码例子SimpleEngine实现对父类SearchEnginebase的继承,因此可以使用父类中add_corpus,哪怕自己没有定义,也可以通过继承来使用。2.多态:理解为允许相同或不同子类型的对象对同一消息作出不同响应,如代码例子SimpleEngine在对父类继承后,对process_corpus及search进行了功能重写,也就是继承了但是也可以做不同功能的实现。3.封装:理解为把数据和操作数据绑定,对外界只暴露接口,如search_engine = SimpleEngine,就实现了对SimpleEngine类的调用,至于里面如何实现不需要知道,使用函数main即可运行4.抽象:特征总结后构造类的过程,形成对应的类/属性/方法/对象等,粗略理解可以说整个class就是抽象后的结果。

  • 几个概念概念大致的对应理解:
:相似事物的集合,如例子class定义属性:对象的某个静态特征,例子file_size代表对象(对应文件)的文件大小方法/函数:对象的某个动态能力,例子使用def定义对象:集合中的一个事物,这里对应由 class 生成的某一个 object,如例子中的 search_engine
以上均为了便于有对概念直观理解,当然并不严谨。


学习交流,有任何问题还请随时评论指出交流。
 
友情链接
鄂ICP备19019357号-22