python面向对象的四大支柱:抽象、封装、继承、多态

1. 抽象

在面向对象编程中,抽象是指将类的属性和方法捆绑在一起,形成一个整体。抽象类无法实例化,但可以作为其他类的基类或父类。在Python中,我们使用abc模块定义抽象类,其中至少包含一个抽象方法。抽象方法是无法直接调用但可以被子类覆盖的方法。

例如,我们可以定义一个Animal类,然后派生出具体的动物类(如CatDog),每个类都有自己的属性和方法。

class Animal:
    def __init__(self, name):
        self.name = name

class Cat(Animal):
    def make_sound(self):
        return "Meow"

class Dog(Animal):
    def make_sound(self):
        return "Woof"

cat = Cat("Kitty")
dog = Dog("Buddy")

print(f"{cat.name} says: {cat.make_sound()}")
print(f"{dog.name} says: {dog.make_sound()}")

2. 封装

封装是隐藏对象内部细节的机制。通过封装,我们可以确保数据的安全性和代码的可维护性。在Python中,我们使用访问修饰符来实现封装,包括公有属性和方法以及私有属性和方法。公有属性和方法可以被类的外部访问,而私有属性和方法只能在类的内部访问。

例如,我们可以使用私有属性和方法来实现封装。

class Person:
    def __init__(self, name, age):
        self.__name = name  # 私有属性
        self.__age = age

    def get_name(self):
        return self.__name  # 公有方法

    def set_name(self, new_name):
        self.__name = new_name  # 公有方法

person = Person("Alice", 30)
print(person.get_name())  # 输出: Alice
person.set_name("Bob")
print(person.get_name())  # 输出: Bob

3. 继承

继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。子类可以继承父类的特性,并在此基础上添加自己的新特性。Python支持单继承和多继承,使得代码更具灵活性和可维护性。

例如,我们可以创建一个Teacher类继承自Person类。

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

class Teacher(Person):
    def teach(self, subject):
        return f"{self.name} teaches {subject}"

teacher = Teacher("Mr. Smith")
print(teacher.teach("Math"))  # 输出: Mr. Smith teaches Math

4. 多态

多态是指不同的子类对象调用相同的父类方法,产生不同的执行结果。多态性使得代码更加通用,兼容性更强。通过方法重写和方法重载,我们可以实现多态。

相关推荐

  1. python 面向对象(封装继承)

    2024-04-01 19:52:02       38 阅读
  2. 面向对象——继承封装

    2024-04-01 19:52:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 19:52:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 19:52:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 19:52:02       82 阅读
  4. Python语言-面向对象

    2024-04-01 19:52:02       91 阅读

热门阅读

  1. 如何利用ChatGPT提升学术研究的效率

    2024-04-01 19:52:02       41 阅读
  2. UML统一建模语言

    2024-04-01 19:52:02       39 阅读
  3. 拉普拉斯变换

    2024-04-01 19:52:02       41 阅读
  4. JQuery入门基础

    2024-04-01 19:52:02       46 阅读
  5. 组件 v-model

    2024-04-01 19:52:02       40 阅读
  6. HashMap 的扩容因子为什么是 0.75?

    2024-04-01 19:52:02       40 阅读
  7. Spring整合JDBC

    2024-04-01 19:52:02       35 阅读