Python学习-面向对象-继承

本文深入探讨Python中的继承和多态概念,通过具体实例演示了如何使用继承来避免代码冗余,提高代码的可读性和维护性。文章详细解释了子类如何继承父类的属性和方法,以及如何在子类中重写父类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#继承: has a
#定义road类
import random
class Road():

    def __init__(self,name, len):
        self.name = name
        self.len = len
#定义car类
class Car():

    def __init__(self,brand, speed):
        self.brand = brand
        self.speed = speed

    def get_time(self,road):
        ran_time = random.randint(1,10)
        msg = '{}品牌的车在{}上以{}速度行驶{}小时。'.format(self.brand,road.name,self.speed,ran_time)
        print(msg)

    def __str__(self):
        return '{}品牌的,速度:{}'.format(self.brand,self.speed)

#创建示例化对象
r1 =Road('京藏高度',1200)
c1 = Car('奥迪',100)

print(c1)

c1.get_time(r1) #将r1对象穿给road,同时r1的参数也传递给road,road和r指向同一个地址
奥迪品牌的,速度:100
奥迪品牌的车在京藏高度上以100速度行驶6小时。

is a

#is a 父类 基类
'''
继承:
 student,employee,doctor都属于person类
 具有相同的属性,相同的代码存在冗余,可读性不高

 提取相同的代码,子类继承父类
 class 子类名(父类名):

 特点:
 1、如果类中不定义__init__,调用父类 super class 的__init__
 2、如果类继承父类也需要定义自己的__init___,就需要在当前类的__init__调用父类的__init__,super().__init__()
 3、如何调用父类的__init__:
    super().__init__(参数)
    super(类名,对象).__init__(参数)
 4、如果父类有某个方法,子类也定义一个同样的方法,则只读取子类的方法。默认搜索原则:先找当前子类,再找父类。

 5、当父类的方法不满足需求时,在子类中定义一个同名的方法,如果还想在父类方法基础上增加方法,则继承父类的方法,如:super().eat()
    子类方法,调用父类的方法。

'''
class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print(self.name + '正在吃饭。。。')

    def run(self):
        print(self.name + '正在跑步。。。')

class Student(Person):

    def __init__(self,name,age,clazz):
        print('===student=init====')
        super().__init__(name,age) #继承父类的共同属性和方法,同时子类属性创建独立的属性和方法
        self.clazz = clazz
    def study(self,course):
        print('{}正在学习{}课程。'.format(self.name,course))

    def eat(self):
        print(self.name + '正在吃饭,喜欢吃肉')

class Employee(Person):
    def __init__(self,name,age,salary,manager):
        super().__init__(name,age)
        self.salary = salary
        self.manager = manager


class Doctor(Person):
    def __init__(self,name,age,patient):
        super().__init__(name,age)
        self.patient = patient


s = Student('xiaoming',17,'python1901')
s.run()
s.study('Python基础')
s.eat() #只要子类中有eat方法,就会调用子类的eat方法,不会调用父类的方法。
e = Employee('xiaolv',18,10000,'boss1')
e.run()
list1 = ['zhang','li','wang']
d = Doctor('xiaohuang',27,list1)
d.run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值