2019.08.28学习整理

2019.08.28学习整理

类的组合

什么是组合

  • 对象的某个属性是另一个类的对象

为什么用组合

  • 组合是用来解决类与之间代码冗余的问题

如何使用组合

class Person:
    school = 'oldboy'
class Teacher(Person):
    def __init__(self,name,age,level,course):
        self.name=name
        self.age=age
        self.level=level
        #course是课程对象,表示老师教授的课程
        self.course=course

class Student(Person):
    # course=[]  #错误
    def __init__(self,name,age):
        self.name=name
        self.age=age
        # course是课程对象,表示学生选的课程
        self.course_list = []
    def choose_course(self,course):
        # self.course=[]  #错误
        #把课程对象追加到学生选课的列表中
        self.course_list.append(course)

    def tell_all_course(self):
        #循环学生选课列表,每次拿出一个课程对象
        for course in self.course_list:
            #课程对象.name  取到课程名字
            print(course.name)

class Course:
    def __init__(self,course_name,course_price,course_period):
        self.name=course_name
        self.price=course_price
        self.period=course_period



course=Course('Python',20199,7)
stu1=Student('nick',19)
stu1.choose_course(course)
stu2=Student('王二丫',19)
stu2.choose_course(course)
stu2.choose_course(Course('linux',19999,5))

多态和多态性

多态

多态指的是一类食物有多种形态(一个抽象类有多个子类,因而多态的概念依赖于继承)

多态性

多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

多态性是一个接口(函数func)的多种实现

多态性的好处

  1. 增加了程序的灵活性:以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
  2. 增加了程序额可扩展性:通过继承Animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

封装

什么是封装

封装就好像是拿来一个麻袋,把小猫,小狗,小王八,一起装进麻袋,然后把麻袋封上口子

为什么要封装

封装数据的主要原因是:保护隐私

封装方法的主要原因是:隔离复杂度

如何用代码实现隐藏

隐藏属性/隐藏方法 隐藏之后,外部访问不到,只有内部能够访问

隐藏属性:通过 __变量名来隐藏

class Person:
    def __init__(self,name,age):
        self.__name=name
         self.__age=age
     def get_name(self):
        # print(self.__name)
        return '[----%s-----]'%self.__name

p=Person('nick',89)
print(p.age)
访问name
print(p.name)
print(p.__name)
print(p.get_name())

隐藏方法:通过 __方法名来隐藏

class Person:
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
    def __speak(self):
        print('6666')

p=Person('nick',89)
p.__speak()
print(Person.__dict__)
p._Person__speak()

类的property

什么是property

  • property装饰器用与被装饰的方法伪装成一个数据类型,在使用时可以不用加括号而直接使用
class Foo:
    def func(self):
        pass

    # 定义property属性
    @property
    def prop(self):
        pass


# ############### 调用 ###############
foo_obj = Foo()
foo_obj.func()  # 调用实例方法
foo_obj.prop  # 调用property属性

qetter和setter方法

class Money(object):
    def __init__(self):
        self.__money = 0

    # 使用装饰器对money进行装饰,那么会自动添加一个叫money的属性,当调用获取money的值时,调用装饰的方法
    @property
    def money(self):
        return self.__money

    # 使用装饰器对money进行装饰,当对money设置值时,调用装饰的方法
    @money.setter
    def money(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")


a = Money()
a.money = 100
print(a.money)
100
posted @ 2019-08-28 16:53  zmy泳  阅读(130)  评论(0编辑  收藏  举报