面向对象三大主要特性:继承,封装,多态
封装:现实世界的事物在类中描述为属性和方法
私有成员
类中提供了私有成员的形式来支持
私有成员变量:以两个下划线__开头
私有成员方法:以两个下划线__开头
class Phone:
__current_voltage=1
def __keep_single_core(self):
print("让CPU以单核模式运行")
def phone_by_5G(self):
if self.__current_voltage>=1:
print('5g通话已开启')
else:
self.__keep_single_core()
print('电量不足,无法使用5g通话,转向单核模式运行')
phone=Phone()
#没办法直接调用私有成员变量和方法,但可以建立公有方法,在公有方法内调用私有变量和方法1
phone.phone_by_5G()
#没办法直接调用私有成员变量和方法,但可以建立公有方法,在公有方法内调用私有变量和方法
私有的只能自己在内部使用,到了外部的类对象那里就不能使用
私有成员的意义:在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用)
继承
语法:
class 类名(父类名):
类内容体
class Phone:
id="1331234"
def phone_by_4G(self):
print('4g通话')
class Phone2024(Phone):
face_id='3132425'
def phone_by_5G(self):
print('使用新功能,5g通话')
phone1=Phone2024()#老是忘记加括号!!!
phone1.phone_by_4G()
phone1.phone_by_5G()
一个子类继承多个父类
class Phone:
name=None
producer=None
def call_by_4g(self):
print("使用4g")
class Phone2023(Phone):
face_id=None
def call_by_5g(self):
print("使用5g")
p1=Phone2023()#老是忘写括号!!!!!!!
p1.call_by_5g()
p1.call_by_4g()
class NFCReader:
nfc_type="第五代"
def read_card(self):
print("NFC读卡")
def write_card(self):
print("NFC写卡")
class RemoteControl:
re_type="第四代"
def control(self):
print("红外遥控开启了")
class MyPhone(Phone,NFCReader,RemoteControl):
pass
phone=MyPhone()
phone.call_by_4g()
phone.control()
phone.read_card()
phone.write_card()
注:多继承,同名的方法或属性按从左到右的顺序来
pass:是占位语句,用来确保函数方法或类定义的完整性,表示无内容,空的意思
复写父类成员和调用父类成员
复写:对父类的成员属性或成员方法进行重新定义
1.直接覆盖父类成员
class Phone:
name="redmi"
def call_by_5g(self):
print('5g网络')
class Phone2024(Phone):
name="Redredmi"
def call_by_5g(self):
print('6g网络')
print('我又更新了')
phone1=Phone2024()
print(phone1.name)
phone1.call_by_5g()
2.需要被复写的父类的成员
(1)调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)#记得写self
(2)使用super()调用父类成员
使用成员变量:super().成员变量
使用成员方法:super().成员方法
class Phone:
name=None
producer="ITCAST"
def call_by_4g(self):
print("使用4g")
#子类
class Phone2023(Phone):
face_id=None
producer="ITHEIMA"
def call_by_5g(self):
print("使用5g哦")
#方法1
print(Phone.producer)
Phone.call_by_4g(self) # 记得写self
#方法2
print(super().producer)
super().call_by_4g()
# #必须写在方法里面
p1=Phone2023()#老是忘写括号!!!!!!!
p1.call_by_5g()