python 的与众不同 -- 进阶篇(四、三大特性)

本文深入探讨面向对象编程的三大核心特性:封装、继承和多态。封装提高程序安全性,继承增强代码扩展性,多态增加程序灵活性。通过Python代码示例,详细解释每个特性在实际开发中的应用。

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

  • 面向对象的三大特性
    • 封装
      封装使程序更安全
    • 继承
      继承使程序扩展性更高
    • 多态
      多态使程序更加灵活

封装

  • 封装是面向对象的三大特性之一
  • 封装使程序更安全
  • 在python中,方法、属性是没有修饰符得,但是我们有时不行别人修改我们的属性值,我们可以这样做
    class MyClass():
        def __init__(self,name):
        # 将变量改掉,让外部不知道内部使用的变量名称是什么
            self.hidden_name = name
    
        def say_hello(self):
            print(self.hidden_name,'你好!!')
    
    mc = MyClass('李四');
    
    mc.say_hello();
    
    当然,如果一定要趴源码然后:mc.hidden_name = ‘王五’,也是可以修改的
  • 私有属性:在变量名称前加双下划线,那这个变量就变成私有的了,只能在内部使用
    class MyClass():
        def __init__(self,name):
            self.__name = name
    
        def say_hello(self):
            print(self.__name,'你好!!')
    
    mc = MyClass('李四');
    mc.say_hello();
    
    此时在执行:mc.__name = ‘王五’ 就没有办法修改了,如果直接调用mc.__name会报错
    在我们开发过程中,是没有办法做到完全隐藏的,双下划线变量,在python内部其实是修改成了:_类名__变量名
    # 这行代码依旧可以修改 __name值
    mc._MyClass__name = '王五'
    
  • 一般我们不会去想办法去隐藏,多是使用一个下划线来提示使用者,告诉他们我的这个变量是不建议你修改的。
  • 一般隐藏的属性变量,我们还是要给getter、setter方法,打开修改权限的
    def get_name():
        pass
    
    def set_name(self,name):
        self._name = name
    
  • 方法装饰器
    有时候我们会觉得写getter、setter方法太过麻烦
    我们可以使用装饰器 把方法修饰成变量使用
    注意 方法名称和变量名称要一样
    # getter装饰器 使用关键字property
    @property
    def name():
        pass
    
    # setter装饰器 使用变量名.setter
    @name.setter
    def name(self,name):
        self._name = name
    
    修饰以后方法的使用
    # 获取那么的值
    mc.name
    # 修改name的值
    mc.name = '王五'
    
  • getter、setter的关系
    单有getter可以
    使用setter方法必须有getter方法,先保证能读才能修改

继承

  • 继承是面向对象的三大特性之一
  • 继承使程序扩展性更高
  • 通过继承可以使一个类使用其他类中属性和方法
  • 语法:
    • class A(B) --> A类继承了B类 *
    • 多重继承时,使用逗号分开 class A(B,C,D)多重继承会导致代码的过度复杂*
  • 检查语法:
    • isinstance(a,b) --> 检擦a是否为b的实例*
    • issubclass(a,b) --> 检查a是否为b的子类*
    • 类名.bases --> 元组形式打印类的所有父类*
# 定义一个类
class Animal:
    def run(self):
        pass

# 定义一个类 并且 继承Animal类
class Dog(Animal):
    def abc(self):
        pass
  • 父类中所有属性和方法都可以被子类继承,包括特殊方法
    重写
  • 在继承中,子类可以复写父类中方法,称之为重写

多态

  • 多态是面向对象的三大特性之一
  • 多态使程序更加灵活
    简单的一个例子
    # len() 函数就是多态的表现
    a = [1,2,3,40]
    s = 'hello'
    t = ('a','b','c','d','e','f','g')
    
    print(len(a))
    print(len(s))
    print(len(t))
    # 是因为list、str、tuple这几个类中都有一个特殊方法‘__len__’
    
    # 如果我创建一个类 在使用len函数则会报错
    class A:
        pass
    
    a = A()
    print(len(a))
    # 但是给A类添加一个特殊方法,就可以使用len函数了
    class A:
        def __len__(self):
            return 123
    
    a = A()
    print(len(a))
    
    以上就是对多态的解释和使用说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马志武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值