1:python面向对象编程

1:python面向对象编程——类的设计与相互调用:以猜拳小游戏为例Python已经学习了一段时间,这两天迫切的想知道,在面向对象编程过程中,类内部定义的各个函数之间的调用规则,一个类中使用另个类定义的方法该怎么处理。想找一个小Demo实现一下。正好看到这个剪刀石头布的猜拳小游戏,代码非常易于理解,就琢磨以这个程序为例,把遇到的这些问题梳理一下。原程序参考以下链接:面向对象之人机猜拳小游戏一、设计类的结构原作者是按照以下顺序设计类的结构的:1.1设计玩家类,电脑类,游戏game类1.2玩家类
摘要由CSDN通过智能技术生成

1:python面向对象编程——类的设计与相互调用:以猜拳小游戏为例

Python已经学习了一段时间,这两天迫切的想知道,在面向对象编程过程中,类内部定义的各个函数之间的调用规则,一个类中使用另个类定义的方法该怎么处理。想找一个小Demo实现一下。正好看到这个剪刀石头布的猜拳小游戏,代码非常易于理解,就琢磨以这个程序为例,把遇到的这些问题梳理一下。原程序参考以下链接:
面向对象之人机猜拳小游戏


一、设计类的结构

原作者是按照以下顺序设计类的结构的:

1.1设计玩家类,电脑类,游戏game类
1.2玩家类player定义一个属性name和方法,出拳,1:石头 2:剪刀 3:布
1.3电脑类基本和玩家类基本一样,但是电脑出拳是随机产生1 2 3
1.4游戏类中包含玩家类和电脑类,定义一个游戏开始方法,调用玩家和电脑类出拳方法,判断游戏结果,谁赢了,把结果保存在一个电脑文件中

class Player:
    def __init__(self,action):
        self.name='玩家'
        self.action=action
    #定义函数来输出玩家的出拳方式
    def  Action(self):
        if  self.action == 1:
            print(f'{self.name}出拳方式为:[石头]')
        elif self.action==2:
            print(f'{self.name}出拳方式为:[剪刀]')
        elif self.action==3:
            print(f'{self.name}出拳方式为:[布]')
class Computer:
    def __init__(self):
        self.name='电脑'
    #定义一个函数获取电脑的出拳方式
    def Action(self,random_num):
        if random_num==1:
            print('电脑出拳方式为:[石头]')
        elif random_num==2:
            print('电脑出拳方式为:[剪刀]')
        elif random_num==3:
            print('电脑出拳方式为:[布]')

显然,这样设计的类不够精炼,每个类都定义了一个Action,内容又非常的重复。可以将Action作为一个单独的类进行设计,输入玩家名、玩家动作的编号,就把“XX玩家的出拳方式为XX”给打印出来。
由于游戏玩家和电脑玩家的区别主要是name,其他功能一样,所以只需要用一个类来定义。
由此可以确定,首先设计两个类:

class Player(object)
	def __init__(self,name):
	self.name = name
	
class Action()
	def __init__(self)

这里就遇到困惑已久的问题:一个类中需要调用另个一个类中定义的方法,该怎么办?
解决这个问题的方法,就是通过实例化一个类的对象,将这个对象作为参数传入另一个类,从而在另一个类中能够调用在此类中定义的方法。
自然的,这里就应该实例化一个动作,将这个动作参数传递给 Player和Computer,然后,再在类中调用Action定义的方法。
Action类,接受的是玩家名、玩家动作的编号。还需要定义动作编号和动作之间的对应关系,这里我们假设:1代表石头、2代表剪刀、3代表布,它之间的映射关系可以用zip函数实现,这样不需要像原程序那样用冗余的判断表达式了。实现代码如下:

def action_mapping(action):
	identifier = [1,2,3]
	actions = ['石头'
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值