python面向对象之组合

面向对象 组合

#   组合 : 就是一个对象拥有一个属性,该属性的值是另外一个对象

					'对象.属性 = 另一个对象'
目的: 解决类与类之间的代码冗余问题
	1.继承:满足什么是什么的关系,is-a的关系  # (继承是一把双刃剑,并不是继承的多就好)
    2.组合:组合表达是has-a关系: 一个对象拥有一个属性,该属性值指向另外一个对象

eg:
class Foo():
    def __init__(self, m):
        self.m = m
class Bar():
    def __init__(self, n):
        self.n = n
obj = Foo(10)
obj1 = Bar(20)

obj.x = obj1  # 这就属于组合
print(obj.__dict__)   # {'m': 10, 'x': <__main__.Bar object at 0x000001B0B6CBA4E0>}

# 这样就可以通过obj对象即可以拿到Foo的属性和方法 也可以拿到Bar的属性属性和方法(超级对象)
class People():
    school = 'SS'
    
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
class Admin(People):
    pass

class Course():
    def __init__(self, name, period, price):
        self.name = name
        self.period = period
        self.price = price
python = Course('python', '6mon', 2000)
linux = Course('linux', '5mon', 3000)

class Student(People, Course):
    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.courses = course
        super().__init__(name, age, gender, )

    def choose_course(self, stu_obj, course):
        stu_obj.courses.append(course)

stu = Student('gary', 20 , 'male')  # 没有给course传值 所有为一个空列表
stu.courses.append(python)  # 这里就是组合 属性的值是另一个对象
stu.courses.append(linux)
 
for course in stu.courses:
    print(course.price) 
    print(course.name)
posted @   JasonBorn  阅读(159)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示