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

原文地址:https://www.cnblogs.com/louzhiyuan/p/10446855.html