面向对象编程简介
面向对象的思想
首相大家对这个名词应该很熟悉,面向对象编程。大家在大学时的计算机老师经常说的东西。在学C语言的时候,老师说这个是面向程序,在学java时,老师说这个是面向对象编程,还有一个面向函数编程,那到底啥是面向对象编程?
首先请大家思考一下,我们人看到一个杯子,第一印象是什么?
对头 颜色,大小,材质,可以用来喝水,还是装饰品。好的,同学们,这就是面向对象的思想,下课(手动滑稽)。面向对象,这个是通过人的思维方式去控制电脑,将我们感兴趣的对象(一切皆是对象,包括你的对象)抽象化,提取我们感兴趣的特性以及其作用,转化成属性和方法并通过代码实现。也许这么说会比较空,那我举个例子吧。在C语言中,我们处理一个事情,去完成一个程序,考虑的应该是程序的开头怎么写,然后这么操作,重中之重是数据类型和算法。而对于java而言,要确定完成任务需要的对象,并将其丰满以及想关联最后实现,对于这种思想,算法和数据结构也很重要,但并没有C中那么重要。
那python是啥?个人觉得面向对象,面向程序,面向函数都可以,但面向对象会更实用 方便一些。
那如何实现面向对象?那就是 类
前期知识
大家在开始类这一部分的学习前,需要有一些其他的铺垫:
import,from,as,*
4个进行包导入的关键字,操作如下
Import X #导入X包
Form X import c #将X包中的C直接导入
from x import c as a #给c取别名
From x import * #将全部导入
注:包查询的顺序为 程序主目录 环境变量 标准库 扩展库
注意自己定义函数和包时,不要和之前系统自带的相同,以免现覆盖
程序入口 if name==’’main’’:
进行较大的程序开发,包括多个脚本共同组成的程序时,这个代表程序的开始部分
面向对象分析的一般思路
1.对象特征分析
2.写了类描述对象模板
3.实例化,模拟过程
对于较好公司,一般这3步都有3层人完成,但对于一些刚起步的公司,那,您都要会。那我们说了那么长时间的对象
问:在python中我们如何创建对象?
答: 实例化类
问:类是什么
答:对象的模板
问:那怎么创建类?怎么实例化类?
类
一般定义格式
class Pensor(): #class定义类名
def use(): #定义方法名
print("使用方法") #定义方法体
注意,在python中,类实例化的对象的元素值可以直接修改,属性也可以直接添加
init
class Pensor(): #类名
def __init__(self,name,age,sex): # init方法,类创建时使用的方法,定义类的属性
self.name=name # self 指实现类的实例,这个自己顿悟吧
self.sex=sex
这个是类创建的基本方法,class后面连接类名,使用__init__定义起始类创建时的属性等的确定方法,注意,在类中存在的__X__的方法表示其为系统已经定义的方法,可通过修改这些方法完成一些意想不到的操作。
def repr(self):
一般让程序输出对象时输出的是系统储存对象的位置
a=Student("小明",'21',"男",grades)
print(a)
E:\Anaconda3\python.exe "C:/Users/LSY123/Desktop/text/python 类/main.py"
<__main__.Student object at 0x0000022827953A20>
但是在类的定义中,存在一个方法,可以修改其print的值
class Student(Pensor):
def __init__(self,name,age,sex,grades):
Pensor.__init__(self,name,age,sex)
self.grades=grades
def __repr__(self):
return self.name
grades=[98,90,97,96,90]
a=Student("小明",'21',"男",grades)
print(a)
E:\Anaconda3\python.exe "C:/Users/LSY123/Desktop/text/python 类/main.py"
小明
同时,有时需要对类中某些属性进行操作得到需要的数据,这些数据同时不允许用户进行修改,这时可以用到
@property
class Student(Pensor):
def __init__(self,name,age,sex,grades):
Pensor.__init__(self,name,age,sex)
self.grades=grades
@property
def avg_grade(self):
return sum(self.grades)/5
def __repr__(self):
return self.name
使用这个后,可以使avg_grade变成类的一个属性,并且不允许修改,以保证数据的完整性
类的静态方法
class Pensor():
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def static():
print("这是静态方法")
a=Pensor.static()
这里的静态方法的概念和C语言的相同,但是这种方法限制了静态方法的使用,只能使用类名称使用方法。
继承
class Employee:
def __init__(self,department,name,birthday,salary):
self.departme = department
self.name = name
self.birthday = birthday
self.salary = salary
def working(self):
print("员工{}正在工作".format(self.name))
class Programer(Employee):
def __init__(self,department,name,birthday,salary,specialty,project):
Employee.__init__(department,name,birthday,salary) #基类进行初始,获取基类全部的方法
self.specialty=specialty
self.project=project
def working(self):
print("程序员 :{}在开发项目".format(self.name))
代码如上图,和java的继承方法类似,,在继承类的init方法中使用被继承类的init方法吗,获取被继承的方法和属性,并可完成重写