Python基础项目:判定结婚功能测试

熟悉面向对象思想的同学,应该都知道其三大特征:封装,继承和多态。在任何支持面向对象思想的编程语言当中,都进行了体现。这一章当中通过完成判定结婚系统,介绍一下封装特征中的私有化等知识点。

需求分析:

涉及到的知识点:

  • 面向对象类的封装,属性私有化封装
  • 对象作为函数的参数进行传递,与对象类型的判断
  • 异常的处理与抛出

逻辑分析:

原题为JAVA试题,gender为性别,题目中为boolean类型,在此题中,我将gender改动为字符串类型,可输入“男”或“女”,其他数据则提示异常,设计个函数marry用于判断是否能够结婚,排除所有不能够结婚的条件,最终依然继续执行,便是可以结婚。

功能实现代码:

class Person(object):

    def __init__(self,name,age,gender,partner=None):
        self.__name = name
        self.__age = age
        self.__gender = gender
        self.__partner = partner

    def setName(self,name):
        self.__name = name
    def getName(self):
        return self.__name
    def setAge(self,age):
        if not isinstance(age,int):
            raise ValueError('age must be type int')
        if age<1 or age>120:
            raise ValueError('age must be between 1 and 120')
        self.__age = age
    def getAge(self):
        return self.__age

    def setGender(self,gender):
        if gender=='男' or gender=='女':
            self.__gender = gender
        else:
            raise ValueError('sex must be 男 or 女')

    def getGender(self):
        return self.__gender

    def setPartner(self,partner):
        if partner ==None:
            self.__partner = None
            return
        if not isinstance(partner,Person):
            raise ValueError('partner type must be Person')
        self.__partner = partner

    def getPartner(self):
        return self.__partner

    def __str__(self):
        if self.__partner != None:
            str = '名字:%s,年龄:%d,性别:%s,配偶:%s'%(self.__name,self.__age,self.__gender,self.__partner.getName())
            return str
        else:
            str = '名字:%s,年龄:%d,性别:%s,没有结婚' % (self.__name, self.__age, self.__gender)
            return str

    # 判断结婚的方法
    def marry(self,operson):
        if self.getGender() == operson.getGender():
            print('在中国,同性暂时不能结婚')
        elif self.getGender() =='男':
            if self.getAge()<24 or operson.getAge()<22:
                print("还未到法定结婚年龄,过几年在来吧!!")
            elif self.getPartner()!=None  or operson.getPartner()!=None:
                print("在中国重婚是犯法了,不能结婚!!")
            else:
                print("恭喜%s和%s新婚快乐,百年好合!!"%(self.getName(),operson.getName()))
                self.setPartner(operson)
                operson.setPartner(self)
        elif self.getGender() == '女':
            if self.getAge()<22 or operson.getAge()<24:
                print("还未到法定结婚年龄,过几年在来吧!!")
            elif self.getPartner() != None or operson.getPartner() != None:
                print("在中国重婚是犯法了,不能结婚!!")
            else:
                print("恭喜%s和%s新婚快乐,百年好合!!" % (self.getName(), operson.getName()))
                self.setPartner(operson)
                operson.setPartner(self)
        else:
            print('系统出现故障了,不能结婚!')

    # 离婚
    def divorce(self):
        # 判断是否已经结婚了
        if self.getPartner() == None:
            print('醒醒吧,还没结婚呢,无法办理离婚手续!')
        else:
            partner = self.getPartner()
            self.setPartner(None)
            partner.setPartner(None)



if __name__ == '__main__':
    #实例化对象
    p1 = Person('李雷',18,'男')
    p2 = Person('韩梅梅',17,'女')
    p1.marry(p2)

    p3 = Person('Jack',20,'男',None)
    p1.marry(p3)
    print("======六年后======")
    p1.setAge(24)
    p2.setAge(23)
    p3.setAge(26)
    p4 = Person('Rose',23,'女',None)
    p1.marry(p4)

    p1.marry(p2)
    #p2.marry(p3)
    p1.divorce()
    p1.marry(p2)

    p3.divorce()
    p3.marry(p4)

    print(p1)
    print(p2)

需要注意的是,在确定两个Person对象能够结婚后,除了打印恭喜结婚的讯息之外,还应该将此对象与其结婚对象伴侣属性赋值给对象,否则下一次此对象调用结婚方法,依然能够结婚,并没有起到作用。self.setPartner(operson) 与operson.setPartner(self)这两句代码非常关键。属于登记颁发结婚证的过程,对双方都起到了约束作用。

此外,我还增加了离婚的方法,当前对象调用离婚方法后,确认其已婚身份,然后就可以将其伴侣属性和其配偶的伴侣属性都设置为None,即完成这函数功能。

上述代码运行后,会实现的效果为:

通过运行我们见证了好一场跌宕起伏的狗血多角恋情,好神奇~   使用双下划线__就可以将属性和函数进行私有化,只能够在本类当中访问,不能够在其他类当中访问~  感谢您的阅读!

代码下载路径:https://download.csdn.net/download/u012156341/11125722

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值