面向对象的精髓,组合--day24

面向对象的精髓
精髓 是 将数据和处理数据的代码绑定 成了一个对象
只要获取到对象 相应的数据和方法都有了
"""
组合
什么叫组合 多个对象放在一起叫组合
在程序中 一个对象将另一个对象作为自己的属性

组合 也可以降低代码的冗余
"""

class Person:-----------------------------把相同数据定义成一个类
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
class Student(Person):-----------------------------把相同数据定义成一个类
def __init__(self,name,sex,age,number):
super().__init__(name, sex, age)
self.number = number


def show_info(self):
print(self.__dict__)

def select_cursor(self):
print("%s 正在选课...." % self.name)

class Teacher(Person):
def __init__(self,name,sex,age,salary,level):
super().__init__(name,sex,age)
self.salary = salary
self.level = level
def set_score(self):
print("%s 正在为学生打分..." % self.name)

# 学生会增加各种各样的新的属性 比如手机 比如电脑, 这样Student中会增加大量的属性和方法
# 后期的维护成本非常高
# 这时就需要使用组合 来完成减少代码冗余
----------------------------------------------------------------------------
class Phone:
def __init__(self,phonenumber,operator,address):
self.phonenumber = phonenumber
self.operator = operator
self.address = address

def call(self):
print("%s 正在拨号" % self.phonenumber)


class Person:
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age


class Student(Person):
def __init__(self,name,sex,age,number):
super().__init__(name, sex, age)
self.number = number

def show_info(self):
# print("name:%s sex:%s, age:%")
print(self.__dict__)

def select_cursor(self):
print("%s 正在选课...." % self.name)

class Teacher(Person):
def __init__(self,name,sex,age,salary,level):
super().__init__(name,sex,age)
self.salary = salary
self.level = level
def set_score(self):
print("%s 正在为学生打分..." % self.name)


stu = Student("乔峰","男",38,"007")

# 学生买了一台手机 所以增加一个手机属性
p1 = Phone("1999999999","中国小米移动","上海浦东")

stu.phone = p1

# 学生要打电话
stu.phone.call()

# 通过将手机对象和学生对象进行组合 完成了需求,并且相比较继承而言
# 耦合度低 手机和学生在修改的时候 互不影响
# 同时也减少了代码冗余

# 继承是一种关系 什么是什么 学生是人类 老师是人类 (如果把手机相关内容插入到人类中,相当于学生是手机???)
# 组合是 对象之间的关系 学生对象拥有手机对象
----------------------------------------------------------------------------

 

posted @ 2018-12-17 20:31  WenChen-0o0  阅读(208)  评论(0编辑  收藏  举报