zoukankan      html  css  js  c++  java
  • 16 静态 组合 继承

    class Room:
        tag = 12
        def __init__(self,name,owner,width,length,heigh):
            self.name = name
            self.owner = owner
            self.width = width
            self.length = length
            self.heigh = heigh
        @property
        def cal_area(self):
            print('%s住的%s总面积是%s'%            (self.owner,self.name,self.width * self.length))
            return self.width * self.length
        @classmethod
        def tell_info(cls,x):
            print(cls)
            print('------->',cls.tag)
            print(x)
        @staticmethod
        def wash_body(a,b,c):
            print('%s正在洗澡'%a)
    #静态方法:
    # r1 = Room('厕所','alex',100,100,100000)
    # r2 = Room('公共厕所','AA',1,1,1)
    # print(r1.cal_area) #加 property之后可执行函数 静态属性
    # print(r2.cal_area)
    # r1.cal_area()
    #类方法
    # Room.tell_info(10) #实例也可以用
    #静态方法 名义上属于类管理 实际上不可调用类属性和实例属性
    Room.wash_body('AA','BB','CC')
    r2 = Room('公共厕所','AA',1,1,1)
    r2.wash_body('a','BBB','CCC')
    
    # print(Room.__dict__)

    #总结
    # 静态属性:函数作为数据属性形式 调用时感受不到内在逻辑
    # 既可以访问实例属性 也可以访问雷属性
    # 类方法:可以访问数据属性 也可以访问函数属性
    # 但是不可以访问实例属性
    # 静态方法:不能访问类属性 也不能访问实例属性

    子类:

    class School:
        def __init__(self,name,addr):
            self.name = name
            self.addr = addr
    class Course:
        def __init__(self,name,period,price,school):
            self.name = name
            self.period = period
            self.price = price
            self.school = school
    s1 = School('北大','beijing')
    s2 = School('复旦','shanghai')
    c1 = Course('linux','1 h','10 dollor',s1)
    print(c1.school.name)
    while True:
        menu ={
                    '1':s1,
                    '2':s2,
                    '3':s3
                    }
        choice = input('>>: ')
        school_obj = menu[choice]
        name = input('namae:')
        price = input('')
        new_course = input()
        print('课程[%s]属于[%s]学校'%(Course,School))
    
     
    
    #low 比解决方案
    class Course:
        def __init__(self,name,price,period,school):
    class School:
        def __init__(self, name, addr):
    #...
    self.name = name
    self.Course_list = []
    s1.Course_list.append(c1)
    s1.Course_list.append(c2)
    for Course_obj in s1.Course_list:
        print(Course_obj.name)

    面向对象的三大特征:继承 多态 封装
    类的继承:
    class Pclass1:

    class Pclass2:

    class SubClass(Pclass1):

    子类继承父类所有属性 但若重名 并不改变父类属性
    当类显著不同 且较小类是较大类所需组件 用组合比较好
    当有很多相同特征 提取相同功能做基类 用继承

    含义2 某子类兼容于某基类 定义一个接口类 子类继承接口类
    并且继承接口中定义的方法

    MRO列表的构造遵循三条准则:
    1 子类会优先于父类被检查
    2 多个父类会根据他们在列表总的顺序被检查
    3 如果对下一个类存在两个合法的选择 选择第一个父类

    新式类:广度优先 python3
    经典类:深度优先 python2

  • 相关阅读:
    本地安全策略
    windows本地用户及组的区别
    mysql基本命令总结
    常用DOS命令
    AES加密算法详解
    ctf密码学习题总结
    CTF最简单的Web题
    python进阶篇
    JNI开发流程
    JDK中的Timer和TimerTask详解
  • 原文地址:https://www.cnblogs.com/louzhiyuan/p/10446855.html
Copyright © 2011-2022 走看看