类的组合与封装

组合

1.什么是组合?

  组合指的是一个对象中,包含另一个或多个对象。

2.为什么要用组合?

  减少代码的冗余

3.如何使用组合?

  耦合度:

  藕:莲藕---->藕断丝连

  • 耦合度越高:程序的可扩展性越低

  • 耦合度越低:程序的可扩展性越高

      • 总结:

          -继承:

          继承是类与类的关系,子类继承父类的属性/方法,子类与父类是一种“从属”关系。

        -组合:

          组合是对象与对象的关系,一个对象拥有另一个对象中的属性/方法,是一种什么有什么的关系

#继承
#父类
class People:
    def __init__(self,name,age,sex,year,mouth,day):
        self.name = name
        self.age = age
        self.sex = sex
        self.year = year
        self.mouth = mouth
        self.day = day
    
        def tell_birth(self):
        print(f'''
        ===== 出生年月日 =====
            年: {self.year}
            月: {self.month}
            日: {self.day}
        ''')


# 老师类
class Teacher(People):
    def __init__(self, name, age, sex, year, month, day):
        super().__init__(name, age, sex, year, month, day)


# 学生类
class Student(People):
    def __init__(self, name, age, sex, year, month, day):
        super().__init__(name, age, sex, year, month, day)


tea1 = Teacher('tank', 17, 'male', 2002, 6, 6)
stu1 = Student('HCY', 109, 'female', 1910, 11, 11)

print(tea1.name, tea1.age, tea1.sex)
tea1.tell_birth()
print(stu1.name, stu1.age, stu1.sex)
stu1.tell_birth()

# 组合实现
class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


# 老师类
class Teacher(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)


# 学生类
class Student(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)



# 日期类
class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def tell_birth(self):
        print(f'''
        ===== 出生年月日 =====
            年: {self.year}
            月: {self.month}
            日: {self.day}
        ''')


# tea1 = Teacher('tank', 17, 'male', 2002, 6, 6)
# print(tea1.name, tea1.age, tea1.sex)
# tea1.tell_birth()
# tea1 = Teacher('tank', 17, 'male')
# stu1 = Student('HCY', 109, 'female', 1910, 11, 11)



stu1 = Student('HCY', 109, 'female')
date_obj = Date(1910, 11, 11)
# 学生对象中包含一个自定义日期对象
stu1.date_obj = date_obj
# print(stu1.name, stu1.age, stu1.sex)
# print(stu1.date_obj.year, stu1.date_obj.month, stu1.date_obj.day)
stu1.date_obj.tell_birth()

封装

1.什么是封装?

  封:比如将一个袋子,封起来

  装:比如将一堆小猫、小狗和jason装在袋子里。

  #对象--->相当于一个袋子

封装指的是可以将一堆属性和方法,封装到对象中。

  ps:对象就好比一个“袋子/容器”,可以存放一对属性和方法

  ps:存不是目的,目的是为了取,可以通过“对象.”的方式获取属性或方法。

2.为什么封装?

  可以通过“对象.”的方式“存放/获取”属性或方法。

  对象拥有“.”的机制

  方便数据的存取。

3.如何封装

 class User:
            x = 10
            def func():
                pass
        obj = User()
        obj.y = 20
        obj ---> x, func, y

 

上一篇:freemarker快速入门


下一篇:面向对象基础-04定制对象独有特征