前言
最近在学习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 属性,在内存里类似于下图来保存。
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种情况:
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入门篇之面向对象的使用技巧和注意事项,需要的朋友参考一下 面向对象设计与面向对象编程的关系 面向对象设计(OOD)不会特别要求面向对象编程语言。事实上,OOD 可以由纯结构化语言来实现,比如 C,但如果想要构造具备对象性质和特点的数据类型,就需要在程序上作更多的努力。当一门语言内建 OO 特性,OO 编程开发就会更加方便高效。另一方
本文向大家介绍php学习笔记之面向对象,包括了php学习笔记之面向对象的使用技巧和注意事项,需要的朋友参考一下 public 公有的:本类,子类,外部对象都可以调用 protected 受保护的:本类 子类,可以执行,外部对象不可以调用 private 私有的:只能本类执行,子类与外部对象都不可调用 面向对象编程的三大特点 1)封闭性 封闭性,也可以称为信息隐藏。就是将一个类的使用和实现分开,
本文向大家介绍Python面向对象基础入门之设置对象属性,包括了Python面向对象基础入门之设置对象属性的使用技巧和注意事项,需要的朋友参考一下 前言 前面我们已经介绍了 python面向对象入门教程之从代码复用开始(一) ,这篇文章主要介绍的是关于Python面向对象之设置对象属性的相关内容,下面话不多说了,来一起看看详细的介绍吧 用类存储数据 类实际上就是一个数据结构,对于python而言,
本文向大家介绍Python深入学习之对象的属性,包括了Python深入学习之对象的属性的使用技巧和注意事项,需要的朋友参考一下 Python一切皆对象(object),每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 属性的__dict__系统 对象的属性可能来自于其类定义,叫做类属性(class attribute)。类属性可能来自类定义自身,也可能根据类
本文向大家介绍javascript学习之json入门,包括了javascript学习之json入门的使用技巧和注意事项,需要的朋友参考一下 1. 什么是JSON JSON---Javascript Object Notation,前两个单词大家应该都认识,最后一个notation,是“记号、标记法”的意思,连在一起,便成了JSON。 它是一种轻量级的数据交换格式,是基于Javascript的一个子
PHP 是一种服务器端的脚本语言,类似 ASP,PHP 脚本在服务器上执行,PHP 支持很多数据库(MySQL、Informix、Oracle、Sybase、Solid、PostgreSQL、Generic ODBC 等等)。