一、封装
1.介绍
将现实世界事物的属性和行为,封装到类中,描述为成员变量和成员方法
2.私有成员
-
定义
-
私有成员变量:变量以
__
开头 -
私有成员方法:变量以
__
开头
-
-
使用
- 私有方法无法直接被类对象使用
- 私有变量无法赋值,也无法获取值
- 私有成员无法被类对象使用,但是可以被其他的成员使用
-
应用:在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用)
3.示例
class Student:
__sex = '男'
def __ifMale(self):
if self.__sex == '男':
return True
else:
return False
def description_sex(self):
if self.__ifMale():
return "男人"
else:
return "女人"
Jack = Student()
print(Jack.description_sex())
二、继承
1.介绍
- 继承分为单继承和多继承
- 继承表示从父类那里继承来成员变量和方法(不含私有)
2.语法
class 类名(父类名):
类内容
3.单继承
class phone:
IMEI = None
producer = None
def call_by_4g(self):
print("4g通话")
class Phone2022(phone):
face_id = True
def call_by_5g(self):
print("2022最新5g通话")
4.多继承
- 多个父类中,如果有同名的成员,那么默认继承顺序从左到右为优先级
class phone:
IMEI = None
producer = None
def call_by_5g(self):
print("5g通话")
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, NFCReader, RemoteControl):
pass
5.复写
子类继承父类的成员属性和成员方法后,可以进行复写。在子类中重新定义同名的属性或方法即可
class Phone:
IMEI = None
producer = "HM"
def call_by_5g(self):
print("父类的5g通话")
class MyPhone(Phone):
# 复写父类属性
producer = "HW"
# 复写父类方法
def call_by_5g(self):
print("子类的5g通话")
phone = MyPhone()
phone.call_by_5g()
6.调用父类同名成员
一旦复写父类成员,那么类对象调用的时候,就会调用复写后的新成员,如果需要使用被复写的父类的成员,需要特殊的调用方式
- 方式一:调用父类成员
- 使用成员变量:
父类名.成员变量
- 使用成员方法:
父类名.成员方法
- 使用成员变量:
- 方式二:使用
super()
调用父类成员- 使用成员变量:
super().成员变量
- 使用成员方法:
super().成员方法
- 使用成员变量:
三、多态
同样的行为(函数),传入不同的对象,得到不同的状态
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
def make_noise(animal: Animal):
animal.speak()
dog = Dog()
cat = Cat()
make_noise(dog) # 输出:汪汪汪
make_noise(cat) # 输出:喵喵喵