过家家游戏
家庭设定:
在某个家庭中有三个成员,父亲、母亲和儿子,三者组成一个家庭,每个人都有自己的姓名、年龄和一些属于自己的小秘密。
实现方法:
因为一个家庭里有三个成员,每个成员都有自己的一些特性,但又都隶属于这个家庭。所以家庭可以定义为一个父类,父类的属性是家庭中每个成员共有的特性;每个成员各定义为一个子类,子类除了具有父类的所有属性外,还具有一些自己特有的属性。
具体代码如下:
import random
class Family():
# 自定义初始化方法
def __init__(self, surname, address, income):
""" 设置家庭姓氏 """
self.surname = surname
self.address = address
self.income = income
class Father(Family):
def __init__(self, name, age):
""" 继承父类的动态属性 """
super(Family, self).__init__()
# 定义动态属性
self.name = name
self.age = age
self.__secret = '我背着老婆藏了私房钱在自己的卡里'
def action(self):
money = random.randint(100, 1000)
return money
class Mother(Family):
def __init__(self, name, age):
""" 继承父类的动态属性 """
super(Family, self).__init__()
# 定义动态属性
self.name = name
self.age = age
self.__secret = '我知道老公用来藏私房钱的那张卡的密码'
def action(self):
money = random.randint(100, 500)
return -money
class Son(Family):
def __init__(self, name, age):
""" 继承父类的动态属性 """
super(Family, self).__init__()
# 定义动态属性
self.name = name
self.age = age
self.__secret = '我把爸爸的那张藏私房钱的卡绑定到了我的支付宝'
def action(self):
money = random.randint(0, 100)
return -money
if __name__ == '__main__':
# 将四个类实例化,生成对象
family = Family('王', '广州市', 1000)
father = Father('俊晖', 35)
mother = Mother('明丽', 33)
son = Son('天一', 10)
# 家庭的自我介绍
print('这是一个姓' + family.surname + '的家庭,他们生活在' + family.address)
print('我是父亲—' + family.surname + father.name + ',今年' + str(father.age) + '岁。')
print('我是母亲—' + mother.name + ',今年' + str(mother.age) + '岁。')
print('我是儿子—' + family.surname + son.name + ',今年' + str(son.age) + '岁。')
# 家庭费用开支
father_money = father.action()
family.income += father_money
print('父亲今天赚了' + str(father_money) + '元,家庭资产剩余' + str(family.income))
mother_money = mother.action()
family.income += mother_money
print('母亲今天花了' + str(-mother_money) + '元,家庭资产剩余' + str(family.income))
son_money = son.action()
family.income += son_money
print('儿子今天花了' + str(-son_money) + '元,家庭资产剩余' + str(family.income))
# 家庭成员的小秘密
print('父亲告诉你一个小秘密:' + father._Father__secret)
print('母亲告诉你一个小秘密:' + mother._Mother__secret)
print('儿子告诉你一个小秘密:' + son._Son__secret)
代码解析:
我们总共定义了四个类,父类是Family,子类是Father、Mother和Son。代码中需要调用标准库random用于生成随机数字,作为家庭的日常收支情况。
Family类用于描述家庭的基本情况,如这个家庭的姓氏、住址和资产。在初始化方法里分别设置动态属性surname、address以及income,代表家庭的姓氏、住址和资产。
Father、Mother和Son类用于描述各个成员。在重写初始化方法的时候,使用**super(Family,self).init()**便可以把父类的初始化方法所定义的动态属性surname、address以及income一并继承到子类的初始化方法中。如果不是用super函数,子类重写初始化方法会覆盖父类的初始化方法。若想子类也继承父类的属性,要在子类重写初始化方法时重新定义父类的属性,要么就是用super函数继承。
每个子类都定义了动态属性name和age,私有属性__secret以及普通方法action。在子类实例化的时候需要设置动态属性name和age的属性值;私有属性__secret是通过强制性方法调用属性值;在调用普通方法action时就会自动生成一个随机整数并将数值返回,这个是要用于家庭资产的计算。