本文目录导读:

我来为你详细讲解Python继承的案例,包括基本继承和多种继承方式。
基本继承案例
# 父类(基类)
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print(f"{self.name}正在吃东西")
def sleep(self):
print(f"{self.name}正在睡觉")
def info(self):
return f"名字:{self.name},年龄:{self.age}"
# 子类(派生类)
class Dog(Animal):
def __init__(self, name, age, breed):
# 调用父类的构造方法
super().__init__(name, age)
self.breed = breed
# 子类特有的方法
def bark(self):
print(f"{self.name}正在汪汪叫")
# 重写父类的方法
def eat(self):
print(f"{self.name}正在吃狗粮")
# 使用示例
dog = Dog("旺财", 3, "金毛")
print(dog.info()) # 调用继承的方法
dog.eat() # 调用重写的方法
dog.sleep() # 调用继承的方法
dog.bark() # 调用子类特有的方法
多层继承
# 基础父类
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def start(self):
print("车辆启动")
def stop(self):
print("车辆停止")
# 中间父类
class Car(Vehicle):
def __init__(self, brand, model, doors):
super().__init__(brand, model)
self.doors = doors
def honk(self):
print("按喇叭:嘀嘀")
# 子类(继承 Car,间接继承 Vehicle)
class ElectricCar(Car):
def __init__(self, brand, model, doors, battery_capacity):
super().__init__(brand, model, doors)
self.battery_capacity = battery_capacity
def charge(self):
print(f"{self.brand} {self.model}正在充电")
# 重写父类方法
def start(self):
print("电动车静音启动")
# 使用示例
tesla = ElectricCar("Tesla", "Model 3", 4, "75kWh")
tesla.start() # 调用重写的方法
tesla.honk() # 继承自 Car
tesla.charge() # 子类特有的方法
tesla.stop() # 继承自 Vehicle
多重继承
# 多个父类
class Flyable:
def fly(self):
print("正在飞行")
def land(self):
print("正在降落")
class Swimmable:
def swim(self):
print("正在游泳")
def dive(self):
print("正在潜水")
# 多重继承
class Duck(Flyable, Swimmable):
def __init__(self, name):
self.name = name
def quack(self):
print(f"{self.name}在嘎嘎叫")
# 使用示例
duck = Duck("唐老鸭")
duck.fly() # 继承自 Flyable
duck.swim() # 继承自 Swimmable
duck.quack() # 子类自己的方法
# 方法解析顺序(MRO)
print(Duck.__mro__) # 查看继承顺序
使用super()的高级用法
class Base:
def __init__(self):
print("Base.__init__")
class A(Base):
def __init__(self):
super().__init__()
print("A.__init__")
class B(Base):
def __init__(self):
super().__init__()
print("B.__init__")
class C(A, B):
def __init__(self):
super().__init__()
print("C.__init__")
# C 的实例化会按照 MRO 顺序调用所有父类的 __init__
c = C()
print(C.__mro__)
实战案例:员工管理系统
class Employee:
"""基础员工类"""
def __init__(self, name, employee_id, salary):
self.name = name
self.employee_id = employee_id
self.salary = salary
def work(self):
print(f"{self.name}正在工作")
def get_salary(self):
return self.salary
def info(self):
return f"员工:{self.name},工号:{self.employee_id}"
class Developer(Employee):
"""程序员子类"""
def __init__(self, name, employee_id, salary, programming_languages):
super().__init__(name, employee_id, salary)
self.languages = programming_languages
def work(self):
print(f"{self.name}正在编写{self.languages}代码")
def code_review(self):
print(f"{self.name}正在进行代码审查")
class Manager(Employee):
"""经理子类"""
def __init__(self, name, employee_id, salary, team_size):
super().__init__(name, employee_id, salary)
self.team_size = team_size
self.team_members = []
def work(self):
print(f"{self.name}正在管理团队")
def add_member(self, employee):
self.team_members.append(employee)
print(f"{employee.name}已加入{self.name}的团队")
class SeniorDeveloper(Developer, Manager):
"""高级程序开发员(多重继承示例)"""
def __init__(self, name, employee_id, salary, languages, team_size):
# 调用第一个父类的构造方法
Developer.__init__(self, name, employee_id, salary, languages)
Manager.__init__(self, name, employee_id, salary, team_size)
def work(self):
print(f"{self.name}既是高级开发人员,也是团队管理者")
Developer.work(self)
Manager.work(self)
# 使用示例
dev = Developer("张三", "D001", 15000, ["Python", "Java"])
mgr = Manager("李四", "M001", 25000, 5)
senior = SeniorDeveloper("王五", "S001", 35000, ["Python", "Go"], 8)
# 测试继承
dev.work()
print(dev.info())
print(f"薪资:{dev.get_salary()}")
mgr.work()
mgr.add_member(dev)
senior.work()
senior.code_review() # 继承自 Developer
senior.add_member(dev) # 继承自 Manager
继承的注意事项
class Parent:
def __init__(self):
print("Parent init")
self.value = 100
def common_method(self):
print("Parent method")
class Child(Parent):
def __init__(self):
# 必须调用父类构造方法
super().__init__()
print("Child init")
# 可以访问父类属性
print(self.value) # 100
def common_method(self):
# 调用父类方法
super().common_method()
print("Child method")
# 私有成员不会被继承
class BaseClass:
def __init__(self):
self.public = "公开"
self._protected = "受保护的" # 约定为保护成员
self.__private = "私有的" # 私有成员(名称修饰)
class SubClass(BaseClass):
def access_members(self):
print(self.public) # 可以访问
print(self._protected) # 可以访问(但不推荐)
# print(self.__private) # 会报错!
# 测试
child = Child()
child.common_method()
sub = SubClass()
sub.access_members()
# 查看私有成员的名称修饰
print(dir(sub))
Python继承的关键点:
- 语法:
class Child(Parent): - 调用父类:使用
super().__init__()或直接Parent.__init__() - 方法重写:子类定义同名方法会覆盖父类方法
- MRO:方法解析顺序决定多继承时的方法调用顺序
- 私有成员:双下划线开头的属性不会被继承
继承能提高代码复用性,但要注意合理使用,避免过深的继承层次。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播