Python面向对象编程入门:封装、继承与多态详解

Chloe
Chloe
发布时间:2026-10-13 | 2人浏览过
原创

本文系统讲解Python面向对象编程的核心概念,涵盖封装、继承与多态三大特性。详细阐述如何通过双下划线实现私有化,利用property函数访问私有属性,以及通过self参数理解对象内存封装机制。同时介绍继承在代码复用中的作用,帮助初学者建立完整的OOP知识体系。

前言

近期深入学习了Python的面向对象编程(OOP)模式。由于此前未接触过其他面向对象语言,这一学习过程极具挑战性且充满乐趣,现将相关知识点整理如下以供参考。

概述

  • Python支持多种编程范式,包括面向过程、面向对象以及面向切面(如装饰器相关技术)等。
  • 面向过程编程:依据业务逻辑,从上至下逐步编写代码。
  • 函数式编程:将特定功能代码封装至函数中,后续无需重复编写,仅需调用该函数即可。
  • 面向对象编程:对函数进行分类与封装,旨在实现“更快、更好、更强”的开发目标。

OOP思想

  • 面向对象的基本哲学认为:世界由具有各自运动规律和内部状态的对象组成,对象之间的相互作用与通信构成了整个世界。
  • 唯一性:世间没有两片完全相同的树叶,同样也不存在完全相同的对象。
  • 分类性:分类是对现实世界的一种抽象处理。
  • 三大特性:封装、继承和多态。

面向对象的三大特性具体包括:

一、封装

封装是对具体对象的一种抽象处理,即将部分细节隐藏起来,在程序外部不可见,从而无法直接调用。

私有化:将类或函数中的某些属性限制在特定区域内,使得外部无法直接访问。

Python中实现私有化的方法较为简单,即在准备私有化的属性(包括方法和数据)名称前添加双下划线。

例如:

class ProtectMe(object): 
 def __init__(self):
 self.me = "qiwsir"
 self.__name = "kivi"
 
 def __python(self):
 print("I love Python.") 
 
 def code(self):
 print9"Which language do you like?")
 self.__python()
 
if __name__ == "__main__":
 p = ProtectMe()
 print(p.me)
 print(p.__name)
 
#运行结果
qiwsir
Traceback (most recent call last):
 File "21102.py", line 21, in <module>
 print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name' 

说明:__name属性已被隐藏,无法直接调用。

若需调用私有属性,可以使用@property函数。

class ProtectMe(object): 
 def __init__(self):
 self.me = "qiwsir"
 self.__name = "kivi"
 
 @property
 def name(self):
 return self.__name
 
if __name__ == "__main__":
 p = ProtectMe()
 print(p.name)

#运行结果
 kivi 

因此,在使用面向对象的封装特性时,需要执行以下操作:

  • 将内容封装到指定位置
  • 从指定位置调用被封装的内容

第一步:将内容封装到某处

self是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self的值等于obj1。

当执行 obj2 = Foo('alex', 78 ) 时,self的值等于obj2。

因此,内容实际上被封装到了对象obj1和obj2中,每个对象内部都包含name和age属性,在内存中的存储结构大致如下图所示。

第二步:从某处调用被封装的内容

调用被封装的内容时,存在两种情况:

  • 通过对象直接调用
  • 通过self间接调用
class Role(object):
 ac = None #类变量
 def __init__(self,name,role,weapon,life_value):
 #初始化方法
 self.name = name #实例变量(成员变量)
 self.role = role
 self.weapon = weapon
 self.life_val = life_value
 
 def buy_weapon(self,weapon): #定义方法
 #self:表示实例本身
 self.weapon = weapon
 # print("%s is buying [%s]" %(self.name,weapon))
 
#把一个抽象的类变成一个具体的对象的过程,叫实例化
 
p1 = Role("sanjiang",'Police',"B10",90) #实例
t1 = Role("Chunyun",'Terrorist',"B11",100)

二、继承

继承是面向对象中的重要概念,与现实生活中的继承类似,即子类可以继承父类的属性和方法。

class SchoolMember(object):
 # member_nums = 0
 def __init__(self,name,age,sex):
 self.name = name
 self.age = age
 self.sex = sex
 # self.enroll()
 
 def enroll(self):
 SchoolMember.member_nums += 1
 print("SchoolMember [%s] is enrolled!" %self.name)
 
 def tell(self):
 print("Hello my name is [%s]" %self.name)
 
class Teacher(SchoolMember):
 def __init__(self,name,age,sex,course,salary): #重写父类的__init__方法
 super(Teacher,self).__init__(name,age,sex) #继承(新式类)
 # SchoolMember.__init__(self,name,age,sex) #继承(旧式类)
 self.course = course
 self.salary = salary
 
 def teaching(self):
 print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
 
 
 
class Student(SchoolMember):
 def __init__(self,name,age,sex,course,tuition):
 super(Student,self).__init__(name,age,sex)
 self.course = course
 self.tuition = tuition
 
 def pay_tuition(self):
 print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))

总结

以上就是本文的全部内容,希望这些内容能对大家的Python学习或工作有所帮助。如有任何疑问,欢迎留言交流。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表