题外话:
在今天之前,我一直在用面向过程的思维去发现和解决问题,现在的面向对象的这种思维给了我很大的触动。上午还在和朋友在聊一个人自学遇到的问题以及困惑,没有老师带着学,也没有人去监督你学,所有的资料内容知识点都需要自己去摸索,一步一步,一点一点。没人会提醒你下一步会遇到怎样的坑,更没人会告诉你什么叫面向对象,所有的一切可能出现的结果都得靠自己的实践,然后从实践中分析出来为何会有如此的输出。遇到不懂的就百度,百度解决不了的就给大神留言,有时候,别人可以很轻松的看出你钻进牛角尖的问题。虽然一路磕磕绊绊,不过我不认输。
接下来谈谈面向对象最重要的两点:对象和类 (部分内容来自百度百科)
1、对象
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
对象的状态和行为。
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中
2、类
具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
接下是类和对象在筛子游戏中的应用:
#骰子游戏 每次两个人 每人三颗骰子 (dice) 估计点数的个数
#分析:有多少类 ? 每个类有多少个对象?
#3个类 游戏本身,骰子,玩家
#根据业务需求抽象出类 明白每个对象的职责
import random
class Game:
def __init__(self,player1,player2):#初始化的过程就是把形参的值封装到对象里面
self.player1=player1
self.player2=player2
print("游戏初始化成功")
def start_game(self):
self.player1.cast()
self.player2.cast()
print(self.player1)
print(self.player2)
def get_win():
self.player1.guess_dice()
self.player2.guess_dice()
#判断函数还没写
class Player:
def __init__(self,name,sex,*dice):#*表示多个 不定长参数
self.name=name
self.sex=sex
self.dices=dice#表示该玩家拥有的骰子列表(元祖)
#玩家抛骰子
def cast(self):
for dice in self.dices:#dice临时变量 self.dices是对象的属性
dice.move()
def guess_dice(self):
return (4,2)
def __str__(self):
play_dice_count_list=[self.dices[0].count,self.dices[1].count,self.dices[2].count]
return "姓名为:%s的筛子列表为:%s"%(self.name,str(play_dice_count_list))
class Dice:
def __init__(self):
self.count=0
#骰子滚动的方法,滚动后返回该骰子的点数
def move(self):
self.count=random.randint(1,6)
#游戏 开始前的准备工作 六颗筛子 两个玩家
d1=Dice()
d2=Dice()
d3=Dice()
d4=Dice()
d5=Dice()
d6=Dice()
player1=Player("zs","男",d1,d2,d3)
player2=Player("ls","女",d4,d5,d6)
for i in range(1,6):
print("第%d次的游戏情况是:"%i)
game=Game(player1,player2)
game.start_game()
用随机数random模拟筛子的点数