Python入门学习篇(十七)——封装、继承、多态
2024-01-07 18:02:29
1 封装
1.1 理解
属性和方法书写到类里面的操作即为封装
封装可以理解成私有化属性和私有化方法
1.2 示例代码
class Person():
p_num = 0 # 用于统计数量
def __init__(self, name, age, sex, job):
# __name为私有化属性
self.__name = name
self.age = age
self.sex = sex
self.job = job
# 调用私有化属性的方法
def get_name(self):
return self.__name
# 修改私有化属性的方法
def set_name(self, name):
self.__name = name
def eat(self):
print("吃饭")
# 私有化方法
def __sleep(self):
print("睡觉")
# 通过公开方法简介调用私有化方法
def show_sleep(self):
self.__sleep()
chinese_teacher = Person("张三", 24, "男", "语文老师")
print(f"name的值为: {chinese_teacher.get_name()}")
chinese_teacher.show_sleep()
1.3 运行截图
2 继承
2.1 理解
子类可以继承父类的所有非私有属性和方法
为了使代码更加简洁
2.2 分类
2.2.1 常规继承
a 语法
class 类A():
# 类A的属性和方法
class 类B(类A):
# 类B的属性和方法
# 注意: 类B中拥有类A的所有非私有属性和非私有方法
b 示例代码
class Animal():
def __init__(self, name, sex, age):
print("父类的构造方法")
self.name = name
self.sex = sex
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
def behavior(self):
print("动物的叫声")
class Cat(Animal):
def __init__(self, name, sex, age):
print("子类的构造方法")
# 调用父类的构造方法
super().__init__(name, sex, age)
# 当子类重写父类的方法时,子类实例化对象调用的是自己的方法
def behavior(self):
print("喵喵喵")
cat = Cat("小金", "雄性", 5)
cat.behavior()
c 运行截图
2.2.2 继承传递
a 语法
class 类A():
# 类A的属性和方法
class 类B(类A):
# 类B的属性和方法
class 类c(类B):
# 类c的属性和方法
# 注意: 类B中拥有类A的所有非私有属性和非私有方法
# 注意: 类C中拥有类A的所有非私有属性和非私有方法、类B的所有非私有属性和非私有方法
# 实际上可以理解为类C继承了类B中拥有的所有非私有属性和非私有方法(包含类B自己继承的)
b 示例代码
class Animal():
def __init__(self, name, sex, age):
print("父类的构造方法")
self.name = name
self.sex = sex
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
def behavior(self):
print("动物的叫声")
def __str__(self):
return f"姓名为: {self.name},性别为:{self.sex},年龄为:{self.__age}"
def describe(self):
return self.__str__()
class Cat(Animal):
num = 0 # 数量
def __init__(self, name, sex, age):
print("子类的构造方法")
# 调用父类的构造方法
super().__init__(name, sex, age)
self.num += 1
# 当子类重写父类的方法时,子类实例化对象调用的是自己的方法
def behavior(self):
print("喵喵喵")
# DragonLi是狸花猫的意思
class DragonLi(Cat):
def __init__(self, name, sex, age):
print("孙类的构造方法")
# 调用父类的构造方法
super().__init__(name, sex, age)
def behavior(self):
print("出去玩耍了")
cat = DragonLi("小金", "雄性", 5)
print("修改前: ", cat.describe())
cat.set_age(6)
print("修改后: ", cat.describe())
cat.behavior()
print("当前猫的数量为:", cat.num)
c 运行截图
2.2.3 多继承(继承多个不同父类)
a 语法
class 类A():
# 类A的属性和方法
class 类B():
# 类B的属性和方法
class 类C(类A,类B):
# 类C的属性和方法
# ①当类A和类B存在同名方法时,类C调用时采用就近原则,即类c定义的括号中,哪个类在前面就调用哪个类的方法
# 例如 class 类C(类A,类B)时,调用的就是类A中的同名方法
# ②当类A、类B、类C均存在同名方法时,类c实例化对象调用时,调用的是类C自己的方法
# ③类c中含有类A、类B的所有非私有属性和非私有方法
b 示例代码
class Animal():
def __init__(self, name, sex, age):
print("父类的构造方法")
self.name = name
self.sex = sex
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
def behavior(self):
print("动物的叫声")
def __str__(self):
return f"姓名为: {self.name},性别为:{self.sex},年龄为:{self.__age}"
def describe(self):
return self.__str__()
def eat_food(self):
print("以有机物为食")
class Fly():
# tool是代表飞翔的工具
def __init__(self,tool):
self.tool=tool
def behavior(self):
print("芜湖起飞")
def fly_reason(self):
print("符合空气动力学原理")
class Bird(Animal,Fly):
num = 0 # 数量
def __init__(self, name, sex, age):
print("子类的构造方法")
# 调用父类的构造方法
super().__init__(name, sex, age)
self.num += 1
# # 当子类重写父类的方法时,子类实例化对象调用的是自己的方法
# def behavior(self):
# print("叽叽喳喳")
bird = Bird("小红", "雄性", 5)
print("修改前: ", bird.describe())
bird.set_age(6)
print("修改后: ", bird.describe())
# 调用的是Animal父类中的behavior方法
bird.behavior()
bird.eat_food()
bird.fly_reason()
c 运行截图
3 多态
3.1 语法
对象=父类(子类实例化对象)
# 多态的实现步骤如下所示:
# ①定义父类,并提供公共方法
# ②定义子类,并重写父类方法
# ③传递子类对象给调用者,可以看到不同子类执行效果不同
3.2 示例代码
# 一户人家养了两只不同的品种的猫,一只是狸花猫,一只是橘猫,狸花猫喜欢出去打架、橘猫喜欢干饭
class Cat():
def __init__(self, name, sex):
self.name = name
self.sex = sex
def behavior(self):
print("猫的行为")
# 狸花猫
class DragonLi(Cat):
def __init__(self, name, sex):
super().__init__(name, sex)
def behavior(self):
print(f"品种为狸花猫的{self.name}喜欢出去打架")
# 橘猫
class OrangeCat(Cat):
def __init__(self, name, sex):
super().__init__(name, sex)
def behavior(self):
print(f"品种为橘猫的{self.name}喜欢干饭")
class Person():
# 发现猫的行为特点,根据传入的不同的obj对象,调用不同的方法
def search_attitude(self, obj):
obj.behavior()
d = DragonLi("小花", "雄性")
o = OrangeCat("小黄", "雌性")
p = Person()
p.search_attitude(d)
p.search_attitude(o)
3.3 运行截图
文章来源:https://blog.csdn.net/SSS4362/article/details/135374022
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!