魔术方法为我们提供了一种定制和控制对象行为的灵活方式,使得代码更具可读性、可维护性和可扩展性。
前后两个下划线,就代表着魔术方法。
__init__
:构造方法,可用于创建类对象的时候设置初始化行为__str__
:用于实现类对象转字符串的行为__lt__
:用于2个类对象进行小于或大于比较__le__
:用于2个类对象进行小于等于或大于__eq__
:等于比较clock.py
import winsound
class Clock:
# 构造方法
def __init__(self, id, price):
self.id = id
self.price = price
def __str__(self):
return f"闹钟{self.id},价格是{self.price}元"
# 魔术方法 价格比较,不带等于
def __lt__(self, other):
return self.price < other.price
# 魔术方法 价格比较,带等于
def __le__(self, other):
return self.price <= other.price
# 魔术方法 价格等于
def __eq__(self, other):
return self.price == other.price
def ring(self):
winsound.Beep(1000, 3000)
if __name__ == "__main__":
clock = Clock(101, 122)
clock1 = Clock(102, 112)
print(clock)
print(clock > clock1)
clock2 = Clock(102, 112)
print(clock2 >= clock1)
clock.ring()
输出:
闹钟101,价格是122元
True
True
True
既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。
类中提供了私有成员的形式来支持:
定义私有成员的方式非常简单,只需要:
即可完成私有成员的设置。
siyou.py
class Phone:
# 当前电压
__current_voltage = None
def __init__(self, IMEI, sound):
# 序列号
self.IMEI = IMEI
# 音量
self.sound = sound
if self.sound < 10:
self.__current_voltage = 1
else:
self.__current_voltage = 0
def ca11_by_5g(self):
if self.__current_voltage:
print("已为您开启降噪模式")
else:
self.__keep_single_core()
def __keep_single_core(self):
print("音量过大,可能会对耳朵造成伤害")
if __name__ == "__main__":
phone = Phone(1102,2)
phone.ca11_by_5g()
私有成员变量:__current_voltage
私有成员方法:__keep_single_core
输出:
已为您开启降噪模式
不对使用者开放的
。继承分为:单继承和多继承。
继承表示:将从父类那里继承(复制)成员变量和成员方法(不含私有)。
封装的优势包括:
class 类名(父类名):
类内容体
jicheng.py
import siyou
class PhoneUp(siyou.Phone):
def __init__(self, IMEI, sound, face_id):
# 面部师表
super().__init__(IMEI, sound)
self.face_id = face_id
def face(self):
if self.face_id != None:
print("面部识别设置成功")
if __name__ == "__main__":
phone = PhoneUp(1102,2,22)
phone.ca11_by_5g()
phone.face()
输出:
已为您开启降噪模式
面部识别设置成功
class 类名(父类名1,父类名2,父类名3,父类名4,……):
类内容体
jicheng.py
import siyou
from sound import clock
class PhoneUp(siyou.Phone, clock.Clock):
def __init__(self, IMEI, sound, id, price, face_id):
super().__init__(IMEI, sound)
super().__init__(id, price)
# 面部识别
self.face_id = face_id
def face(self):
if self.face_id != None:
print("面部识别设置成功")
if __name__ == "__main__":
phone = PhoneUp(1102, 2, 1111,122,22)
phone.ca11_by_5g()
phone.face()
phone.ring()
输出:
音量过大,可能会对耳朵造成伤害
面部识别设置成功
先继承的优先级高于后继承
if 1 == 1:
print(True)
else:
pass