面向对象包含三大主要特性:
- 封装
- 继承
- 多态
封装
私有对象,方法
我们在成员属性和成员方法中,定义了私有属性和方法后,我们实例化一个类对象,该类对象无法调用私有属性和方法,但这些私有对象和方法可以被其他的成员使用。
class Phone:
__current_vol = 0.5
def __singel_core(self):
print('单核运行')
def call_by_5g(self):
if self.__current_vol >= 1:
print('5g通话开启')
else:
print('电量不足,启用单核模式')
self.__singel_core()
phone = Phone()
phone.call_by_5g()
=============================================
>>> 电量不足,启用单核模式
>>> 单核运行
案例:
class Phone:
__is_5g_enable = False
def __check_5g(self):
if self.__is_5g_enable:
print('5g开启。')
else:
print('5g关闭,使用4g网络。')
def call_by_5g(self):
self.__check_5g()
print('正在通话中...')
phone = Phone()
phone.call_by_5g()
================================================
>>> 5g关闭,使用4g网络。
>>> 正在通话中...
继承
单继承语法:
class Phone:
IMEI = None
producer = 'HM'
def call_by_4g(self):
print('4g通话')
class Phone2022(Phone):
face_id = '10001'
def call_by_5g(self):
print('新功能')
phone = Phone2022()
print(phone.producer)
phone.call_by_5g()
phone.call_by_4g()
========================================
>>> HM
>>> 新功能
>>> 4g通话
多继承语法:
class Phone:
IMEI = None
producer = 'HM'
def call_by_4g(self):
print('4g通话')
class NFCReader:
nfc_type = '第五代'
producer = 'HM'
def read_card(self):
print('NFC读卡')
def write_card(self):
print('NFC写卡')
class RemoteControl:
rc_type = '红外遥控'
def control(self):
print('红外遥控已开启')
class MyPhone(Phone, RemoteControl, NFCReader):
pass
phone = MyPhone()
phone.control()
phone.read_card()
phone.write_card()
phone.call_by_4g()
print(phone.nfc_type)
总结:
- 子类构建的类对象,可以有自己的成员变量和成员方法
- 子类构建的类对象,可以使用父类的成员变量和成员方法
- 单继承:一个类继承另一个类
- 多继承:一个类继承多个类,按照顺序从左到右依次继承,多继承中,如果父类有同名的方法或属性,先继承的优先级高于后继承
- pass关键字是一个占位语句,用来保证函数(方法)的完整性,表示无内容。
复写
子类继承父类的成员方法和成员属性后,如果对其“不满意”,可以对其进行复写,即在子类中重新定义同名的属性或方法。
class Phone:
IMEI = None
producer = 'HM'
def call_by_4g(self):
print('4g通话')
class MyPhone(Phone):
producer = 'xx'
def call_by_4g(self):
print('更新4g')
phone = MyPhone()
phone.call_by_4g()
print(phone.producer)
=============================================
>>> 更新4g
>>> xx
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员,如果这时需要调用被复写的父类成员(未被复写的),需要特殊的调用方式:
- 方式1:
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)- 方式2:
使用成员变量:super().成员变量
使用成员方法:super().成员方法()