Python 面向对象的三大特征

前言:本篇讲解面向对象的三大特征(封装,继承,多态),还有比较细致的(类属性类方法,静态方法),分步骤讲解,比较适合理清楚三大特征的思路

Python 面向对象的三大特征_第1张图片

面向对象的的三大特征:

  1. 封装------根据职责将属性和方法封装到一个抽象的类中 ; 增强代码的安全性

  2. 继承------实现代码的重用,相同的代码不需要重复的编写 ; 增强代码的可重用性

  3. 多态------不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 。 增强代码的可扩展性

封装

1.1 概念:

封装是将数据(属性)和操作数据的方法(行为)捆绑在一起,形成一个独立的单元,即对象。同时,对外部隐藏对象的内部实现细节,只提供公开的接口供外部访问和操作,以此增强数据的安全性和程序的可维护性。

把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装
封装可以为属性和方法添加为私有权限,不能直接被外部访问

1.2 封装中的私有属性和私有方法:

在面向对象代码中,我们可以把属性和方法分为两大类:公有(属性、方法)、私有(属性、方法)
Python:公有(属性、方法),私有(属性、方法)
Java:公有(属性、方法),受保护(属性、方法),私有(属性、方法)
公有属性和公有方法:无论在类的内部还是在类的外部我们都可以对属性和方法进行操作。
但是有些情况下,我们不希望在类的外部对类内部的属性和方法进行操作。我们就可以把这个属性或方法封装成私有形式。

1.3 定义方式:

在 Python 里,通过命名约定来实现访问控制。以单下划线 _ 开头的属性和方法被视为受保护的,虽外部仍可访问,但开发者通常将其作为内部使用的标识;以双下划线 __ 开头的属性和方法被视为私有的,外部不能直接访问。

class BankAccount:
    def __init__(self, balance):
        # 私有属性
        self.__balance = balance

    def deposit(self, amount):
        self.__balance += amount
        return self.__balance

    def withdraw(self, amount):
        if amount <= self.__balance:
            self.__balance -= amount
            return self.__balance
        else:
            return "余额不足"

    def get_balance(self):
        return self.__balance


account = BankAccount(1000)
# 不能直接访问私有属性
# print(account.__balance) 会报错
print(account.get_balance())  

当然私有属性不能在类的外部被直接访问,我们也有方法。

1.4 私有属性设置与访问"接口"

读取私有属性的接口(Getter 方法)

为了让外部代码能够安全地获取私有属性的值,可以在类中定义一个公共的方法,通常称为 Getter 方法。

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

    # Getter 方法,用于获取私有属性 __name 的值
    def get_name(self):
        return self.__name

    # Getter 方法,用于获取私有属性 __age 的值
    def get_age(self):
        return self.__age

p = Person("Alice", 25)
print(p.get_name())  # 输出: Alice
print(p.get_age())   # 输出: 25
修改私有属性的接口(Setter 方法)

如果需要允许外部代码修改私有属性的值,可以在类中定义一个公共的方法,通常称为 Setter 方法。在 Setter 方法中,可以添加一些验证逻辑,确保修改的值是合法的。

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

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, new_name):
        if isinstance(new_name, str):
            self.__name = new_name
        else:
            print

你可能感兴趣的:(python,开发语言,面向对象,继承,封装,多态,pycharm)