• python学习笔记 day23 组合类型


     1. 使用组合创建一个圆环类(组合:一个类的对象可能是别的类的属性)

    from math import pi
    class Circle():
        def __init__(self,r):
            self.r=r
        def area(self):
            return pi*self.r**2
        def perimeter(self):
            return 2*pi*self.r
    class Ring():
        def __init__(self,outside,inside):  # 这里面的outside,inside其实是Circle实例化的对象,在Ring类中作为了Ring类对象的属性,也就是组合类型
            self.outside=outside
            self.inside=inside
        def area(self):
            return self.outside.area()-self.inside.area()
        def perimeter(self):
            return self.outside.perimeter()+self.inside.perimeter()
    
    outside=Circle(4)  # 实例化Circle 就是代表一个圆(对象),该对象又是作为Ring的属性的
    inside=Circle(3)
    print(Ring(outside,inside).area())  # 计算圆环的面积
    print(Ring(outside,inside).perimeter())

    运行结果:

     2. ,使用组合创建一个老师类,老师可以有很多属性,然后需要有生日(也得是一个类),也可以有其他类,或者属性(主要是跟老师相关)

    import time
    class Birthday():
        def __init__(self,year,mon,day):
            self.year=year
            self.mon=mon
            self.day=day
        def view(self):
            return "生日为:%s年%s月-%s日"%(self.year,self.mon,self.day)
    class Days():
        def __init__(self,year,mon,day):  # 这个year是当前的
            self.year=year
            self.mon=mon
            self.day=day
        def cal_days(self):
            days=0
            if self.year %4==0 and self.year%100!=0 or self.year%400==0:  # 闰年
                L=[31,29,31,30,31,30,31,31,30,31,30,31]
            else:
                L=[31,28,31,30,31,30,31,31,30,31,30,31]
            if self.mon==1:
                return self.day
            else:
                for i in range(self.mon-1):
                    days+=L[i]
            return days
    
    
    class Teacher():
        def __init__(self,name,age,sex,birthday,days_bir):
            self.name=name
            self.age=age
            self.sex=sex
            self.birthday=birthday
            self.days_bir=days_bir
        def view_info(self):
            return "今天是:%s月%s日,老师生日是:%s"%(time.localtime().tm_mon,time.localtime().tm_mday,self.birthday.view())
        def cal_days_dif(self,days_cur):
            if self.days_bir.cal_days()-days_cur.cal_days()>=0:
                return self.days_bir.cal_days()-days_cur.cal_days()
            else:
                return days_cur.cal_days()-self.days_bir.cal_days()+365
    
    birthday=Birthday(1996,12,12)
    days_bir=Days(time.localtime().tm_year,birthday.mon,birthday.day)
    days_cur=Days(time.localtime().tm_year,time.localtime().tm_mon,time.localtime().tm_mday)
    t1=Teacher('Eav-J',22,'',birthday,days_bir)
    print(t1.view_info())
    print("距离您生日还有%s天"%(t1.cal_days_dif(days_cur)))

    运行结果:

    这里有一个问题,我是暴力解决的,比如说我生日是 4-12 但现在9-17号,今年生日已经过去了,怎么计算离下次生日还有多久~

    talk is cheap,show me the code
  • 相关阅读:
    Java8 Lambda表达式详解手册及实例
    成功,侥幸,以小博大?永远离不开的墨菲定律
    Java8 Stream性能如何及评测工具推荐
    康威定律,作为架构师还不会灵活运用?
    Java8 Stream新特性详解及实战
    Java SPI机制实战详解及源码分析
    jQuery是什么
    庞氏骗局
    excel中VBA的使用
    wcf ServiceContract
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9663221.html
Copyright © 2020-2023  润新知