面向对象和面向过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象和面向过程相关的知识,希望对你有一定的参考价值。

一款简单自动运行小游戏模拟:在一维的地图上,有一只虫子和一只蚂蚁。每一次他们都走过一个-3,-2,+2,+3个随机单位的距离(选定走法,若达到地图边界则放弃移动)。当蚂蚁,虫子处于同一位置时,蚂蚁吃掉虫子,程序结束。

面向过程:

import random


ant_point=random.randint(0,20)
worm_point=random.randint(0,20)
print ‘ant_point:‘,ant_point,‘worm_point:‘,worm_point

step=[-2,+2,-3,+3]

while ant_point !=worm_point:
astep=random.choice(step)
if 0 <=ant_point+astep<=20:
ant_point+=astep

astep=random.choice(step)
if 0<=worm_point+astep<=20:
worm_point+=astep
print ‘ant_point:‘,ant_point,‘worm_point:‘,worm_point

random.randint(a,b):用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,Python生成随机数;

random.choice():choice() 方法返回一个列表,元组或字符串的随机项。

面向对象:import random

class Sprite:

step=[-2,+2,-3,+3]

def __init__(self,gm,point=None):
self.gm=gm
if point is None:
self.point=random.randint(0,20)
else:
self.point=point

def jump(self):
astep=random.choice(Sprite.step)
if 0<=self.point+astep<=20:
self.point+=astep

class Ant(Sprite):

def __init__(self,gm,point=None):
super().__init__(gm,point)
self.gm.set_point(‘ant‘,self.point)

def jump(self):
super().jump()
self.gm.set_point(‘ant‘,self.point)

class Worm(Sprite):

def __init__(self,gm,point=None):
super().__init__(gm,point)
self.gm.set_point(‘worm‘,self.point)

def jump(self):
super().jump()
self.gm.set_point(‘worm‘,self.point)

class GameMap:
def __init__(self):
self.ant_point=None
self.worm_point=None

def catched(self):
print ‘ant:‘,self.ant_point,‘worm‘,self.worm_point
if self.ant_point is not None and self.worm_point is not None and self.ant_point==self.worm_point:
return True

def set_point(self,src,point):
if src==‘ant‘:
self.ant_point=point
if src==‘worm‘:
self.worm_point=point

if __name__==‘__main__‘:
gm=GameMap()
worm=Worm(gm)
ant=Ant(gm)
while not gm.catched():
worm.jump()
ant.jump()

实例属性:
类被实例化以后才会具有的属性,
一般在__init__()方法中创建并初始化,
直接使用即定义:self.<属性名>,
引用方法:self.<属性名>,
self用来代表类的实例的,
类外用实例名.属性名方式定义和引用,
相同类的不同实例其实例属性不相关,
一般不建议在__init__()方法之外创建和初始化实例属性,
一般不推荐类外定义和修改,修改可以单独定义方法。

类属性
类定义后就存在,而且不需要实例化
类属性使的相同类的不同实例共同持有相同变量

私有属性:
不提供限制访问属性的关键字(无法限制类的各种属性在类外直接访问)
使用__开头的变量名加以标识,只有类对象自己才能访问
使用_开头的变量名加以标识,应该只有类对象及其子类才能访问(非强制性),在外部仍能访问

特殊属性:
保存对象的元数据:__doc__,__name__,__dict__,__module__,__base__

作业:定义一个类Box,具有实例属性长度(length),宽度(width),高度(height)。具有私有属性体积(由长宽高计算得来),并且它的每个实例可以知道它被实例化的数量。然后实例化它们五次,并输出每个实例的所有属性。





以上是关于面向对象和面向过程的主要内容,如果未能解决你的问题,请参考以下文章

面向过程和面向对象的区别,方法重载和方法重写的区别

面向对象和面向过程的区别

面向接口设计和编程——(面向对象面向接口面向过程面向实现) --转载

面向过程编程与面向对象编程

面向对象编程(OOP)和面向过程编程

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态