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中,不推荐使用抽象类强制限制子类的定义,但是推荐类都遵循鸭子类型.
- 继承:
- 耦合性太高,程序的扩展性太差
- 鸭子类型:
- 耦合度低,程序的可扩展性强