python的面向对象

一、组合

1、什么是组合?

组合就是把对象的某个属性设置为另一个对象。

2、为什么要使用组合?

和继承一样,为了减少代码的冗余。

3、如何使用组合

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


class Date:
    def __init__(self,year,month,day):
        self.year = year
        self.month = month
        self.day = day

    def Tell_biirthday(self):
        print(f'''
        === 出身日期 ===
        年:{self.year}
        月:{self.month}
        日:{self.day}
        ===============
        ''')


teacher1 = Teacher('tbw',18,'boy')
birthday = Date(1997,8,14)

teacher1.birthday = birthday
teacher1.birthday.Tell_biirthday()

二、访问限制机制

1、什么是访问限制机制?

在类内部定义属性,凡是以__开头的属性与方法属性,都会被python内部自动隐藏起来,让外部不能直接“直接”访问类内部的__开头的属性。

比如:

__name = 'tbw'  # 不能直接调用 类名.__name 这个属性,但可以用类内部的接口访问

2、为什么要有访问限制机制?

限制了一些机密属性被外界直接调用的可能性,使隐私的属性与不能被外部轻易访问的属性,可以隐藏起来,不能被外部直接调用。

(好处)对重要数据的获取的逻辑更加严谨,进而保证了数据的安全。

3、如何利用访问限制机制?

可以通过类内部的接口调用类内部的隐私数据(因为访问限制是针对外界调用类内部属性的一种措施,它并不禁止类内部的调用),可以在接口内进行一些逻辑判断,再把数据返回给调用者。

注意:在python中不会强制限制属性的访问,类内部__开头的属性

class ATM:
    # 1.插卡
    def __insert_card(self):
        print('插卡')
        pass

    # 2.输入密码
    def __input_pwd(self):
        print('密码验证')
        pass

    # 3.输入取款金额
    def __input_money(self):
        print('输入金额')
        pass

    # 4.开始吐钱
    def __get_money(self):
        print('执行吐钱')
        pass

    # 5.打印账单
    def __print_flow(self):
        print('打印账单')
        pass

    # 取钱直接接口
    def withdraw(self):
        self.__insert_card()
        self.__input_pwd()
        self.__input_money()
        self.__get_money()
        self.__print_flow()
        print('取款程序执行完毕!')


atm = ATM()
atm.withdraw()

'''
插卡
密码验证
输入金额
执行吐钱
打印账单
取款程序执行完毕!
'''

三、抽象类(了解)

1、什么是抽象类?

abc模块 (abstract_class模块)

2、使用抽象类的目的?

强制子类必须遵循父类的一套标准。

3、如何使用抽象类?

import abc

4、鸭子类型(了解)

什么是鸭子类型?

在不知道当前对象是何物的情况下,但是你长得像鸭子,那么你就是鸭子类型.

在python中,不推荐使用抽象类强制限制子类的定义,但是推荐类都遵循鸭子类型.

  • 继承:
    • 耦合性太高,程序的扩展性太差
  • 鸭子类型:
    • 耦合度低,程序的可扩展性强
posted @ 2019-10-11 22:35  Donner  阅读(141)  评论(0编辑  收藏  举报