本篇文章给人人带来的内容是关于Python言语的面向对象编程的引见(附代码),有肯定的参考价值,有须要的朋侪可以参考一下,愿望对你有所协助。
Python言语的面向对象
面向对象编程,即OOP,关于面向对象的言语来讲,常常会提到封装、继续、类等观点。
面向对象的由来:基于哲学中的万物皆对象,中心头脑是将我们的顺序对象化,模块化,在Python言语中经常运用class定名一个类,比方class Person(),class Student等等。在类中常常有属性和行动,比方在Person这个类中有名字,身高,体重等属性,这些Python有吃,睡,交朋侪等行动。经由历程类我们可以很轻易的完成后期的挪用,而不须要将一些反复的代码再写一遍,如许大大提高了编程的效力。所以如今面向对象的编程言语运用普遍。
面向对象有三大特性 继续,封装,多态
1 继续
继续观点:一个类继续另一个类,则称继续的类为子类,被继续的类为父类。
目标:可以完成代码的反复运用。
明白:子类与父类的关联并非一样平常生活中的父子关联,子类与父类而是一种特殊化与一般化的关联,是is-a的关联,子类是父类越发细致的分类。如 class dog 继续于 animal,就可以明白为dog is a animal.注重设想继续的时刻.
效果:继续后子类自动具有了父类的属性和要领,子类可以写本身特有的属性和要领,目标是完成功用的扩大,子类也可以复写父类的要领即要领的重写。
2 封装
观点:封装也称为信息隐蔽,是指应用抽象数据范例将数据和基于数据的操纵封装在一起,使其组成一个不可分割的自力实体,数据被庇护在抽象数据范例的内部,尽量地隐蔽内部的细节,只
保存一些对外接口使之与外部发作联络。体系的其他部份只要经由历程包裹在数据表面的被受权的操纵来与这个抽象数据范例交换与交互。也就是说,用户无需晓得对象内部要领的完成细节,但可以依据对象供应的外部接口(对象名和参数)接见该对象。
优点:(1)明确分工。将能完成某一特定功用的代码封装成一个自力的实体后,各顺序员可以在须要的时刻挪用,从而完成了专业的分工。(2)信息隐蔽,完成细节。经由历程掌握接见权限可以将可以将不想让客户端顺序员看到的信息隐蔽起来,如某客户的银行的暗码须要保密,只能对该客户开辟权限。
3 多态
观点:雷同的事物,挪用其雷同的要领,参数也雷同时,但表现的行动却差别。
明白:子类以父类的身份涌现,但做事情时还是以本身的要领完成。子类以父类的身份涌现须要向上转型(upcast),个中向上转型是由JVM自动完成的, 是平安的,但向下转型(downcast)是不平安的,须要强迫转换。子类以父类的身份涌现时本身特有的属性和要领将不能运用。
“面向历程”和“面向对象”的区分
面向历程就是剖析出解决题目所须要的步骤,然后用函数把这些步骤一步一步完成,运用的时刻一个一个顺次挪用就可以了;面向对象是把组成题目事件分解成各个对象,竖立对象的目标不是为了完成一个步骤,而是为了描叙某个事物在全部解决题目的步骤中的行动。
可以拿生活中的实例来明白面向历程与面向对象,比方完成一场竞赛,面向历程的设想思绪就是起首剖析题目的步骤:
1、竞赛最先 2、最先合作,3、半途逾越,4、分出输赢。把上面每一个步骤用差别的要领来完成。
假如是面向对象的设想头脑来解决题目。面向对象的设想则是从别的的思绪来 解决题目。全部竞赛可以分为1、竞赛对象 2、竞赛规则3、效果评定等。
下面以一个小例子来讲明Python言语面向对象的编程历程:
一、 #1 定义一个类,个中类名是门生 #2 门生具有的属性 #3 门生具有哪些行动 #4 详细化两个门生,实例化范例 class Student(object): name = " " age = 12 weight = 50 school = "wuhan university" def eat(self,orange): print("l love orange") def study(self): print("let me study!") stu1 = Student() stu2 = Student() print(stu1) print(stu2) print(stu1.name) print(stu1.age) print(stu2.name) print(stu2.age) 二、 #进一步优化:经由历程上面的顺序我们发明他们终究输出的对象的属性一样,然则事实上他们是两个差别的门生,他们的名字,岁数并不雷同,那末接下来须要做的就是给他们各自给予各自的属性,应用类名.属性=某个值,和要领的挪用一样也是类名.要领名 class Student(object): name = " " age = 12 weight = 50 school = "wuhan university" def eat(self,orange): print("l love orange") def study(self): print("let me study!") stu1 = Student() stu1.name="王" stu1.age = 20 stu2 = Student() stu2.name = "张" stu2.age = 50 print(stu1) print(stu1.name) print(stu1.age) print(stu2) print(stu2.name) 三、 #进一步优化:经由历程第二个顺序我们发明在定义对象的属性时我们还须要将所得属性定名在写一次,如许明显比价贫苦,因而有了更好的属性定名要领,我们可以运用初始化 def __init__(self,、、、),末了在定名属性的时刻只须要在类名背面的括号中填写详细的属性值即可,大大较少了代码量。 class Student(object): def __init__(self,name,age,school): self.name = name self.age = age self.school = school def eat(self,orange): print("l love orange") def study(self): print("let me study!") stu1 = Student("li",25,"scu") stu2 = Student("sun",20,"wpu") print(stu1) print(stu2) print(stu1.name) print(stu1.school) print(stu2.name) print(stu2.school)
self 代表类中的实例,而不是类,谁人实例挪用类中的要领,那末这个self就属于谁人对象,比方在Student中加一个要领,毛遂自荐。
class Student(object): def __init__(self,name,age,school): self.name = name self.age = age self.school = school def eat(self,orange): print("l love orange") def study(self): print("let me study!") def intro(self): print("my name is{},{} years old".format(self.name,self.age)) stu1 = Student("li",25,"scu") stu2 = Student("sun",20,"wpu") print(stu1) print(stu2) print(stu1.name) print(stu1.school) print(stu2.name) print(stu2.school) intro1 = stu1.intro() intro2 = stu2.intro()
若要打印出对象的属性等信息给客户看,然则因为属性太多,一个个打印出来很贫苦,可以运用__str__(),以下:
class Student(object): def __init__(self,name,age,school): self.name = name self.age = age self.school = school def eat(self,orange): print("l love orange") def study(self): print("let me study!") def intro(self): print("my name is{},{} years old".format(self.name,self.age)) def __str__(self): return "%s-%d"%(self.name,self.age) stu1 = Student("li",25,"scu") stu2 = Student("sun",20,"wpu") print(stu1)
假如如果的Python中类的属性值不转变,那末在属性前加两个-,称为私有属性,private
如:
self.__money = money,不能再表面直接接见
print(stu1.__money)报错
然则在内部可以直接运用,如在要领eat中挪用
假如属性名前是一个下划线,则他虽然可以在外部接见,然则约定俗成提醒不要接见!!!
以上就是Python言语的面向对象编程的引见(附代码)的细致内容,更多请关注ki4网别的相干文章!