python中如何继承父类的属性

在面向对象编程中,继承是一种重要的机制,它允许子类从父类(也称为基类或超类)继承属性和方法,从而实现代码的复用和扩展。在python中,继承的语法非常简单,只需要在子类的定义中括号里写上父类的名字,就可以实现继承。例如:

class Animal: #父类
    def __init__(self, name):
        self.name = name #属性
    def eat(self): # 方法
        print(self.name + " is eating")
class Dog(Animal): # 子类,继承自Animal
    def bark(self):#方法
        print(self.name + " is barking")

在这个例子中,Dog类继承了Animal类,因此它可以使用Animal类的属性和方法,比如name和eat。同时,Dog类也可以定义自己的属性和方法,比如bark。这样,Dog类既保留了Animal类的通用特征,又增加了自己的特殊行为,体现了继承的优势。

主要应用场景

● 继承在python中有很多应用场景,比如:实现多态:多态是指不同的子类可以对同一个父类的方法有不同的实现,从而根据对象的类型表现出不同的行为。例如,我们可以定义一个Shape类,它有一个area方法,用于计算形状的面积。然后,我们可以定义不同的子类,比如Circle,Rectangle,Triangle,它们都继承自Shape类,但是对area方法有不同的实现,分别根据圆的半径,矩形的长宽,三角形的底和高来计算面积。这样,当我们调用area方法时,就会根据对象的类型执行不同的代码,实现多态。

class Shape: #父类
    def area(self): #方法
        pass #空实现,表示该方法需要在子类中重写
class Circle(Shape): #子类,继承自Shape
    def __init__(self, radius):
        self.radius = radius #属性
    def area(self): #方法,重写父类的方法
        return 3.14 * self.radius ** 2 #计算圆的面积
class Rectangle(Shape): #子类,继承自Shape
    def __init__(self, length, width):
        self.length = length #属性
        self.width = width #属性
    def area(self): # 方法,重写父类的方法
        return self.length * self.width # 计算矩形的面积
class Triangle(Shape): # 子类,继承自Shape
    def __init__(self, base, height):
        self.base = base # 属性
        self.height = height # 属性
    def area(self): # 方法,重写父类的方法
        return 0.5 * self.base * self.height # 计算三角形的面积

实现抽象类和接口:抽象类是指不能被实例化的类,它只定义了一些抽象的方法,没有具体的实现,需要在子类中实现。接口是一种特殊的抽象类,它只包含抽象的方法,没有任何属性。抽象类和接口的作用是定义一些规范和约束,让子类遵循一定的标准,提高代码的一致性和可维护性。在python中,可以使用abc模块来实现抽象类和接口,例如:

from abc import ABC, abstractmethod # 导入abc模块
class Animal(ABC): # 抽象类,继承自ABC
    @abstractmethod # 装饰器,表示该方法是抽象的
    def eat(self): # 方法
        pass # 空实现,表示该方法需要在子类中实现
    @abstractmethod # 装饰器,表示该方法是抽象的
    def make_sound(self): # 方法
        pass # 空实现,表示该方法需要在子类中实现
class Dog(Animal): # 子类,继承自Animal
    def eat(self): # 方法,实现父类的抽象方法
        print("Dog is eating")
    def make_sound(self): # 方法,实现父类的抽象方法
        print("Dog is barking")
class Cat(Animal): # 子类,继承自Animal
    def eat(self): # 方法,实现父类的抽象方法
        print("Cat is eating")
    def make_sound(self): # 方法,实现父类的抽象方法
        print("Cat is meowing")

实现多重继承:多重继承是指一个子类可以同时继承多个父类,从而获得多个父类的属性和方法。多重继承可以实现更复杂的功能,但也需要注意一些问题,比如菱形继承,方法解析顺序,命名冲突等。在python中,多重继承的语法是在子类的定义中括号里写上多个父类的名字,用逗号分隔,例如:

class A: # 父类
    def __init__(self):
        self.a = "a" # 属性
    def method_a(self): # 方法
        print("This is method a")
class B: # 父类
    def __init__(self):
        self.b = "b" # 属性
    def method_b(self): # 方法
        print("This is method b")
class C(A, B): # 子类,继承自A和B
    def __init__(self):
        A.__init__(self) # 调用A的构造方法
        B.__init__(self) # 调用B的构造方法
        self.c = "c" # 属性
    def method_c(self): # 方法
        print("This is method c")

在这个例子中,C类继承了A类和B类,因此它可以使用A类和B类的属性和方法,比如a,b,method_a,method_b。同时,C类也可以定义自己的属性和方法,比如c,method_c。这样,C类集成了A类和B类的功能,实现了多重继承。

案例演示

为了更好地理解和应用继承,可以看一个案例,假设我们要设计一个学校的管理系统,我们可以使用继承来定义不同的角色,比如学生,老师,校长等,它们都继承自一个公共的父类,比如人员,然后根据不同的角色定义不同的属性和方法,比如姓名,年龄,性别,学号,工号,科目,薪水,考试,教学,管理等,例如:

class Person: # 父类,表示人员
    def __init__(self, name, age, gender):
        self.name = name # 属性,表示姓名
        self.age = age # 属性,表示年龄
        self.gender = gender # 属性,表示性别
    def introduce(self): # 方法,表示自我介绍
        print("Hello, my name is " + self.name + ", I am " + str(self.age) + " years old, and I am a " + self.gender)
class Student(Person): # 子类,继承自Person,表示学生
    def __init__(self, name, age, gender, student_id, subject):
        Person.__init__(self, name, age, gender) # 调用父类的构造方法
        self.student_id = student_id # 属性,表示学号
        self.subject = subject # 属性,表示科目
    def study(self): # 方法,表示学习
        print(self.name + " is studying " + self.subject)
    def take_exam(self, score): # 方法,表示考试
        print(self.name + " took the exam and got " + str(score) + " points")        

在这个类中,我们定义了学生类的属性和方法,它们都是基于父类的属性和方法的扩展,比如学号,科目,学习,考试等。这样,我们就可以创建学生类的对象,比如:

s1 = Student("Alice", 18, "female", "1001", "math") # 创建一个学生对象
s1.introduce() # 调用父类的方法
s1.study() # 调用自己的方法
s1.take_exam(90) # 调用自己的方法

输出结果如下:

Hello, my name is Alice, I am 18 years old, and I am a female
Alice is studying math
Alice took the exam and got 90 points

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值